Junior — Middle
Je potrebné použiť mechanizmus escape pre uzávery odovzdávané ako argumenty funkcie?
sobes.tech AI
Odpoveď od AI
V Swift-e sú uzávery predvolene non-escaping, čo znamená, že nemôžu byť uložené a volané po ukončení funkcie, do ktorej boli odovzdané.
Ak je potrebné uzáver uložiť a volať neskôr (napríklad v asynchrónnom volaní, callbacku), je potrebné ho označiť ako @escaping.
Príklad:
func performAsyncTask(completion: @escaping () -> Void) {
DispatchQueue.global().async {
// nejaká práca
completion() // volanie uzáveru neskôr
}
}
Ak je uzáver použitý iba vnútri funkcie a nie je uložený, @escaping nie je potrebný.
Teda, escaping mechanizmus by sa mal používať iba vtedy, keď môže byť uzáver volaný po opustení funkcie, do ktorej bol odovzdaný.