Sobes.tech
Middle

Ինչպե՞ս կարելի է ստեղծել թույլ կապ փոփոխականի տիպի պրոտոկոլի վրա Swift-ում։

sobes.tech AI

Պատասխան AI-ից

Պատահական է օգտագործել weak բանալի բառը նախքան պրոտոկոլի տիպի փոփոխականի հայտարարումը։ Պրոտոկոլը պետք է հայտարարվի այնպես, որ այն կարող է կիրառվել միայն դասերի վրա՝ կամ ժառանգելով AnyObject-ից, կամ օգտագործելով class բանալի բառը։

Օրինակ AnyObject-ից ժառանգությամբ՝

protocol MyDelegate: AnyObject {
    func doSomething()
}

class MyClass {
    weak var delegate: MyDelegate?
}

Օրինակ class բանալի բառով՝

protocol AnotherDelegate: class { // Swift 4.1-ով մինչեւ տարբերակ
    func doSomethingElse()
}

// Մոդեռն Swift տարբերակներում (>= 4.1) բավական է ժառանգել `AnyObject`-ից

weak-ի օգտագործումը կանխում է ուժեղ ցիկլային հղումները, օրինակ՝ դելեգատորացման դեպքում, երբ սեփական օբյեկտը հղում է դելեգատորին, իսկ դելեգատորը՝ վերադառնում սեփական օբյեկտին կամ նման կառուցվածքին։ Զուֆալ հղումը չի ավելացնում օբյեկտի հղումների հաշվիչը։