Sobes.tech
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.