Sobes.tech
Junior — Middle

Este necesar să folosiți un mecanism de escape pentru closures transmise ca argumente ale unei funcții?

sobes.tech AI

Răspuns de la AI

În Swift, closures-urile sunt, prin default, non-escaping, adică nu pot fi stocate și apelate după ce funcția în care sunt transmise s-a încheiat.

Dacă este necesar să păstrați și să apelați closure-ul mai târziu (de exemplu, într-un apel asincron, callback), trebuie să îl marcați ca @escaping.

Exemplu:

func performAsyncTask(completion: @escaping () -> Void) {
    DispatchQueue.global().async {
        // o muncă
        completion() // apelăm closure-ul mai târziu
    }
}

Dacă closure-ul este folosit doar în interiorul funcției și nu este stocat, @escaping nu este necesar.

Prin urmare, mecanismul de escaping trebuie utilizat doar atunci când closure-ul poate fi apelat după ieșirea din funcția în care a fost transmis.