Sobes.tech
Junior — Middle

Тафовут байни қайдномаи @Escaping ва функсияҳои стандартӣ дар забони барномасозӣ чист?

sobes.tech AI

Ҷавоб аз AI

Ескейпинг @escaping дар Swift (забон iOS) истифода мешавад, барои нишон додан, ки як пӯшида (closure) метавонад пас аз баромадан аз функсия, ки дар он дода шудааст, фаро хонда шавад.

Ба таври стандартӣ, пӯшидаҳо дар Swift ҳамчун non-escaping ҳисоб мешаванд, яъне онҳо бояд дар дохили бадани функсия фаро хонда шаванд. Агар пӯшида нигоҳ дошта шавад, масалан, дар хосият ё дар вақти асинхрон пас аз он, бояд онро ҳамчун @escaping нишон дод.

Ин барои идоракунии хотира ва пешгирии шикастаниҳо муҳим аст, зеро @escaping пӯшидаҳо метавонанд self-ро дарбар гиранд ва истифодаи равшанонаи self.-ро талаб мекунанд.

Масалан:

func performAsyncTask(completion: @escaping () -> Void) {
    DispatchQueue.global().async {
        // Корҳои асинхронӣ
        completion() // фаро хондан пас аз баромадан аз функсия
    }
}

Ин гуна, @escaping аз пӯшидаҳои стандартӣ (non-escaping) фарқ мекунад, ки имкон медиҳад пӯшида дарозтар аз вақти иҷрои функсия зиндагӣ кунад ва баъдтар фаро хонда шавад.