Junior — Middle
¿Es necesario utilizar un mecanismo de escape para los cierres pasados como argumentos a una función?
sobes.tech AI
Respuesta de la IA
En Swift, los cierres por defecto son no-escape, es decir, no pueden almacenarse ni llamarse después de que la función en la que se pasan finalice.
Si necesitas guardar y llamar al cierre más tarde (por ejemplo, en una llamada asíncrona, en una devolución de llamada), debes marcarlo como @escaping.
Ejemplo:
func performAsyncTask(completion: @escaping () -> Void) {
DispatchQueue.global().async {
// algún trabajo
completion() // llamamos al cierre más tarde
}
}
Si el cierre solo se usa dentro de la función y no se guarda, no es necesario @escaping.
Por lo tanto, el mecanismo de escape solo debe usarse cuando el cierre puede ser llamado después de salir de la función a la que se pasa.