Sobes.tech
Junior — Middle

Faut-il utiliser un mécanisme d'échappement pour les closures passées en tant qu'arguments à une fonction?

sobes.tech IA

Réponse de l'IA

En Swift, les closures par défaut sont non-escaping, c’est-à-dire qu’ils ne peuvent pas être conservés ni appelés après la fin de la fonction dans laquelle ils sont passés.

Si vous devez conserver et appeler le closure plus tard (par exemple, dans un appel asynchrone, un callback), vous devez le marquer comme @escaping.

Exemple :

func performAsyncTask(completion: @escaping () -> Void) {
    DispatchQueue.global().async {
        // un travail quelconque
        completion() // appel du closure plus tard
    }
}

Si le closure est utilisé uniquement à l’intérieur de la fonction et n’est pas conservé, @escaping n’est pas nécessaire.

Ainsi, le mécanisme d’échappement doit être utilisé uniquement lorsque le closure peut être appelé après la sortie de la fonction à laquelle il est passé.