Junior — Middle
Milline on @Escaping märgise ja tavaliste funktsioonide vahe programmeerimiskeeles?
sobes.tech AI
Vastus AI-lt
Märkus @escaping Swiftis (iOS keel) kasutatakse selleks, et näidata, et sulg (closure) võib olla kutsutud pärast funktsiooni väljumist, milles see anti.
Vaikimisi peetakse Swiftis sulgusid mitte-escaping, see tähendab, et need peavad olema kutsutud funktsiooni keha sees. Kui sulg salvestatakse, näiteks omadusse või kutsutakse hiljem asünkroonselt, tuleb seda märkida kui @escaping.
See on oluline mälu haldamise ja lekkekaitse jaoks, kuna @escaping sulud võivad haarata self ja nõuavad selget self. kasutamist sees.
Näide:
func performAsyncTask(completion: @escaping () -> Void) {
DispatchQueue.global().async {
// Asünkroonne töö
completion() // kutsumine pärast funktsiooni väljumist
}
}
Seega erineb @escaping tavapärastest (non-escaping) sulgudest, võimaldades sulgadel elada kauem kui funktsiooni täitmise aeg ja kutsuda neid hiljem.