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 треба користити само када затварач може бити позван након изласка из функције у коју је прослеђен.