Junior — Middle
Fəaliyyətə arqument kimi ötürülən bağlamalar üçün escape mexanizmi istifadə etmək lazımdırmı?
sobes.tech Süni İntellekt
AI-dan cavab
Swift-də, bağlamalar standart olaraq non-escaping-dir, yəni onlar ötürülən funksiyanın sonunda saxlanıla və çağırıla bilməz.
Əgər bağlamanı saxlamaq və sonra çağırmaq lazımdırsa (məsələn, asinxron çağırışda, callback-də), onu @escaping kimi işarələmək lazımdır.
Nümunə:
func performAsyncTask(completion: @escaping () -> Void) {
DispatchQueue.global().async {
// müəyyən iş
completion() // sonra çağırırıq
}
}
Əgər bağlama yalnız funksiyanın içində istifadə olunursa və saxlanmırsa, @escaping lazım deyil.
Beləliklə, escaping mexanizmi yalnız bağlama funksiyadan çıxış etdikdən sonra çağırıla biləcəyi halda istifadə olunmalıdır.