Sobes.tech
Middle

Swiftda protokol turidagi o'zgaruvchiga zaif havola qanday yaratish mumkin?

sobes.tech AI

AIdan javob

Protokol turi o'zgaruvchisi e'lonidan oldin weak kalit so'zidan foydalanish kerak. Protokol faqat sinflarga qo'llanilishi uchun e'lon qilinishi kerak: yoki AnyObject dan meros olish yoki class kalit so'zidan foydalanish.

AnyObject dan meros olish bilan misol:

protocol MyDelegate: AnyObject {
    func doSomething()
}

class MyClass {
    weak var delegate: MyDelegate?
}

class kalit so'zi bilan misol:

protocol AnotherDelegate: class { // Swift 4.1 gacha bo'lgan variant
    func doSomethingElse()
}

// Zamonaviy Swift versiyalarida (>= 4.1) faqat `AnyObject` dan meros olish kifoya qiladi

weak dan foydalanish, masalan, delegatsiya holatida, kuchli referensiyalar aylanishlarini oldini oladi; bu erda egalar ob'ekti delegatga murojaat qiladi va delegat ham o'z navbatida egaga (yoki shunga o'xshash tuzilishga) murojaat qiladi. Kuchsiz referensiya ob'ektning referensiya hisoblagichini oshirmaydi.