Junior — Middle
V čom spočíva rozdiel medzi anotáciou @Escaping a štandardnými funkciami v programovacom jazyku?
sobes.tech AI
Odpoveď od AI
Poznámka @escaping v Swift (jazyk iOS) sa používa na označenie, že uzáver (closure) môže byť volaný po opustení funkcie, do ktorej bol odovzdaný.
Predvolene sú uzávery v Swift považované za non-escaping, teda musia byť volané v rámci tela funkcie. Ak sa uzáver uloží, napríklad, do vlastnosti alebo sa volá asynchrónne neskôr, je potrebné ho označiť ako @escaping.
Toto je dôležité pre správu pamäti a prevenciu únikov, pretože @escaping uzávery môžu zachytiť self a vyžadujú explicitné použitie self. vo vnútri.
Príklad:
func performAsyncTask(completion: @escaping () -> Void) {
DispatchQueue.global().async {
// Asynchrónna práca
completion() // volanie po opustení funkcie
}
}
Takto sa @escaping líši od štandardných (non-escaping) uzáverov tým, že umožňuje uzáveru žiť dlhšie ako čas vykonávania funkcie a byť volaný neskôr.