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.