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