Junior — Middle
Ar būtina naudoti escape mechanizmą funkcijos argumentais perduodamiems uždarymams?
sobes.tech AI
Atsakymas iš AI
Swift'e, uždarymai pagal numatytuosius nustatymus yra non-escaping, tai reiškia, kad jie negali būti saugomi ir kviečiami po funkcijos, į kurią jie perduoti, pabaigos.
Jei reikia juos išsaugoti ir vėliau iškviesti (pvz., asinchroninio skambučio, callback metu), juos reikia pažymėti kaip @escaping.
Pavyzdys:
func performAsyncTask(completion: @escaping () -> Void) {
DispatchQueue.global().async {
// tam tikras darbas
completion() // iškviečiame vėliau
}
}
Jei uždarymas naudojamas tik funkcijos viduje ir nėra saugomas, @escaping nėra reikalingas.
Todėl escaping mechanizmas turėtų būti naudojamas tik tada, kai uždarymas gali būti iškviestas po funkcijos, į kurią jis perduotas, pabaigos.