Sobes.tech
Junior — Middle

Da li je potrebno koristiti mehanizam za bekstvo za zatvaranja koja se prosleđuju kao argumenti funkcije?

sobes.tech АИ

Одговор од АИ

У Swift-у, затварачи по подразумеванию нису-escaping, што значи да се не могу чувати и позивати након што функција у коју су прослеђени заврши.

Ако је потребно да се затварач сачува и позове касније (на пример, у асинхроном позиву, callback-у), он мора бити означен као @escaping.

Пример:

func performAsyncTask(completion: @escaping () -> Void) {
    DispatchQueue.global().async {
        // неки посао
        completion() // позив затварача касније
    }
}

Ако се затварач користи само унутар функције и не чува се, @escaping није потребан.

Стога, механизам escaping треба користити само када затварач може бити позван након изласка из функције у коју је прослеђен.