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