En Swift, los cierres no se escapan de forma predeterminada.
Un cierre sin escape se llama inmediatamente en la función a la que se pasa. La vida de este cierre finaliza cuando finaliza la llamada a la función. Como resultado, no habrá rastro de ese cierre nunca más.
Pero este comportamiento predeterminado de un cierre puede ser un problema cuando ejecuta código asíncrono. Esto se demuestra mejor con un ejemplo muy simple. Así que vamos a entrar en materia.
Digamos que estás enviando mensajes a tu amigo y le preguntas "¿Cómo estás?". Como sabes, tu amigo tarda un tiempo en responder. Digamos que toma 2 segundos por ejemplo.
Ahora desea simular esta conversación amistosa en Swift.
Necesita una función que tome un cierre del controlador de respuesta como su parámetro. Este manejador de respuestas es simplemente responsable de encargarse de imprimir la respuesta de tu amigo que llega 2 segundos después:
func howAreYou(_ responseHandler: (String) -> Void) {
print("Hey, how are you?") // you ask how are you
// Simulating how it takes 2 seconds for your friend to answer:
DispatchQueue.main.asyncAfter(deadline: .now() + 2, execute: {
responseHandler("Hi, I'm doing really good.")
})
print("Responding takes a while...")
}
howAreYou({ friendResponse in
print(friendResponse)
})
Esto significa que responseHandlerse destruiría antes de que llegue la respuesta de tu amigo.
Entonces, el problema es que responseHandlernunca tendría la oportunidad de manejar la respuesta de su amigo porque sería destruido antes de que "llegue" la respuesta.
Ahora puede que se pregunte si hay una manera de terminar la ejecución de esta función, pero manteniendo responseHandlervivo de alguna manera para que pueda manejar la respuesta... Bueno, eso es exactamente lo que @escapinghacen los cierres.
Ahora, para usar un cierre de escape, todo lo que necesita hacer es marcar el responseHandlercierre @escaping de la siguiente manera:
func howAreYou(_ responseHandler: @escaping (String) -> Void) {
print("Hey, how are you?") // you ask how are you
// It takes 2 seconds for your friend to answer:
DispatchQueue.main.asyncAfter(deadline: .now() + 2, execute: {
responseHandler("Hi, I'm doing really good.")
})
print("Responding takes a while...")
}
howAreYou({ friendResponse in
print(friendResponse)
})
¡Es tan simple como eso! ¡ Ahora su responseHandlercierre puede mostrar la respuesta de su amigo, ya que puede sobrevivir howAreYoual alcance de la función!
Los cierres de escape son útiles siempre que desee que el cierre pueda vivir fuera del alcance de la función desde donde lo está llamando.
Por ejemplo, cuando se trata de solicitudes de red, por ejemplo, al obtener algunos datos de un servidor, la solicitud de red tardará un tiempo en completarse y en llegar la respuesta.
Si desea realizar algunas acciones con la respuesta de la red, necesitará un cierre de escape para que el controlador de respuesta viva fuera de la llamada de función de solicitud para manejar la respuesta, por ejemplo, 2 segundos después.
Espero que le sea útil. ¡Dale algunos aplausos para que otros también lo encuentren!
Asegúrate de seguirme en Medium para no perderte nada. Además, seamos amigos en Linkedin .
Paso 1 Arregla tu intestino. El siguiente youtube tiene buenos consejos.
Para evitar ambigüedades se utilizarán los siguientes términos; autenticador; El teléfono móvil que se utiliza para realizar el inicio de sesión en el sitio web; El sitio web o la aplicación que el usuario está utilizando para realizar el servicio de solicitud de inicio de sesión; El proveedor que proporciona el servicio dado, por ejemplo
Es una mañana brillantemente dorada en las ondulantes colinas del oeste, mientras los primeros rayos del sol iluminan la hierba escarchada de las llanuras. Una manada de ganado Angus plácido, negro azabache y enorme, se recorta contra el amanecer mientras avanzan por un sendero trillado hacia un lugar que todos conocen bien; la barra de desayuno
Hace poco estuve en Linkedin, la red social profesional más grande del mundo, y encontré publicaciones de diseñadores independientes a los que sigo que me llamaron la atención. Todos publicaron fotos desde aviones, en la playa con sus computadoras portátiles, desde piscinas y oficinas con vistas increíbles.
En 2022, con el lanzamiento de GPT-3, la habilidad de escritura parece perder importancia. Con IA, las personas con mala escritura también pueden generar personal de calidad.