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 № 1Si 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()
})