Junior — Middle
Функцияга аргумент катары берилген жабдуулар үчүн escape механизмин колдонуу керекпи?
sobes.tech AI
AIден жооп
Swift-те, жабдуулар әдепкі бойынша non-escaping, яғни олар сақталмайды және берілген функция аяқталғаннан кейін шақырылмайды.
Егер жабдууды сақтап, кейінірек шақыру қажет болса (мысалы, асинхронды шақыруда, callback-те), оны @escaping ретінде белгілеген жөн.
Мысал:
func performAsyncTask(completion: @escaping () -> Void) {
DispatchQueue.global().async {
// қандай да бір жұмыс
completion() // кейін шақырамыз
}
}
Егер жабдуу тек функция ішінде пайдаланылады және сақталмаса, @escaping қажет емес.
Сондықтан, escaping механизмі тек жабдуу функциядан шыққаннан кейін шақырылуы мүмкін болғанда қолданылуы керек.