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