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.