/ / ¿Es un cierre que se pasa como un parámetro asignado al nombre del parámetro en swift? - veloz, cierres

¿Se pasa un cierre como un parámetro asignado al nombre del parámetro en swift? - rápido, cierres

Este código es de esta Blog.

Es la razón por la que podemos llamar completion() porque el cierre que se pasa en () -> () ¿Está esencialmente asignado a la finalización del parámetro y así la finalización de la llamada ejecuta el cierre?

func thisNeedsToFinishBeforeWeCanDoTheNextStep(completion: () -> ()) {
print("The quick brown fox")
completion()
}

func thisFunctionNeedsToExecuteSecond() {
print("jumped over the lazy dog")
}

Si ese es el caso, re: llamar a la función de abajo no entiendo cómo el código de abajo se traduce en la primera función que se llama y se completa antes de thisFunctionNeedsToExecuteSecond() ¿es? Lo que quiero decir con eso es cómo es el ()->() dando como resultado el completion() ejecutando antes thisFunctionNeedsToExecuteSecond() se llama - es difícil explicar esto por escrito.

thisNeedsToFinishBeforeWeCanDoTheNextStep { () -> () in
thisFunctionNeedsToExecuteSecond()
}

Respuestas

2 para la respuesta № 1

Si crea una función con un cierre como uno de sus parámetros de entrada, el cierre se ejecuta tan pronto como lo llama inputParameterName(). Los paréntesis después del nombre del parámetro de entrada marcan la llamada de función sin parámetros de entrada al cierre, ya que su tipo en su caso es Void->Void.

En tu segundo ejemplo,

thisNeedsToFinishBeforeWeCanDoTheNextStep { () -> () in
thisFunctionNeedsToExecuteSecond()
}

Usted ve un cierre posterior. Si el último parámetro de entrada de una función es un cierre, la llamada de la función se puede convertir a la sintaxis del cierre final, donde puede omitir el nombre del cierre (finalización en su caso) y el código entre los {} Se ejecutará una vez que se llame el cierre.

Así que el código anterior es equivalente a

thisNeedsToFinishBeforeWeCanDoTheNextStep(completion: { () -> () in
thisFunctionNeedsToExecuteSecond()
})