Middle
Jak vytvořit slabé odkazy na proměnnou typu protokol ve Swiftu?
sobes.tech AI
Odpověď od AI
Je nutné použít klíčové slovo weak před deklarací proměnné typu protokolu. Protokol by měl být deklarován tak, aby bylo možné jej použít pouze u tříd: buď děděním od AnyObject, nebo použitím klíčového slova class.
Příklad s děděním od AnyObject:
protocol MyDelegate: AnyObject {
func doSomething()
}
class MyClass {
weak var delegate: MyDelegate?
}
Příklad s klíčovým slovem class:
protocol AnotherDelegate: class { // Varianta do Swift 4.1
func doSomethingElse()
}
// V moderních verzích Swift (>= 4.1) stačí dědit od `AnyObject`
Použití weak zabraňuje cyklickým silným odkazům, například při delegování, kde vlastník odkazuje na delegáta, a delegát zpět na vlastníka (nebo podobnou strukturu). Slabý odkaz nezvyšuje čítač odkazů objektu.