Sobes.tech
Middle

Ako vytvoriť slabé odkaz na premennú typu protokol v Swift?

sobes.tech AI

Odpoveď od AI

Je potrebné použiť kľúčové slovo weak pred vyhlásením premennej typu protokolu. Protokol by mal byť vyhlásený tak, aby sa mohol aplikovať iba na triedy: buď dediť od AnyObject, alebo použiť kľúčové slovo class.

Príklad s dedičstvom od AnyObject:

protocol MyDelegate: AnyObject {
    func doSomething()
}

class MyClass {
    weak var delegate: MyDelegate?
}

Príklad s kľúčovým slovom class:

protocol AnotherDelegate: class { // Varianta do Swift 4.1
    func doSomethingElse()
}

// V moderných verziách Swift (>= 4.1) stačí dediť od `AnyObject`

Použitie weak zabraňuje cyklickým silným odkazom, napríklad pri delegovaní, kde vlastník odkazuje na delegáta, a delegát späť na vlastníka (alebo podobnú štruktúru). Slabý odkaz nezvyšuje čítač odkazov objektu.