Junior — Middle
Оё зарур аст, ки механизмии escape барои замиконҳое, ки ҳамчун аргументҳо ба функсия дода мешаванд, истифода шавад?
sobes.tech AI
Ҷавоб аз AI
Дар Swift, жабдиданиҳо дар пешфарз non-escaping мебошанд, яъне онҳо наметавонанд пас аз анҷоми функсияе, ки ба он дода шудаанд, нигоҳ дошта шаванд ва даъват шаванд.
Агар ба шумо лозим ояд, ки жабдиданиҳоро нигоҳ доред ва баъдан даъват кунед (масалан, дар даъвати асинхронӣ, callback), бояд онҳоро ҳамчун @escaping нишон диҳед.
Масалан:
func performAsyncTask(completion: @escaping () -> Void) {
DispatchQueue.global().async {
// коре
completion() // баъдтар даъват мекунем
}
}
Агар жабдидани танҳо дар дохили функсия истифода шавад ва нигоҳ дошта нашавад, @escaping лозим нест.
Аз ин рӯ, механизмии escaping бояд танҳо вақте истифода шавад, ки жабдидани метавонад пас аз хориҷ шудан аз функсия, ки ба он дода шудааст, даъват шавад.