Junior — Middle
Lze vytvořit slabé odkaz na vlastnost, která implementuje protokol?
sobes.tech AI
Odpověď od AI
Ve Swiftu nelze vytvořit slabou (weak) odkaz na vlastnost, která implementuje protokol, pokud tento protokol není omezen pouze na třídy (class-only protocol). To je způsobeno tím, že slabé odkazy lze použít pouze na referenční typy (třídy), zatímco protokoly mohou být implementovány jak třídami, tak strukturami nebo enumeracemi.
Chcete-li použít slabý odkaz na vlastnost typu protokolu, je třeba omezit protokol děděním od AnyObject, například:
protocol MyProtocol: AnyObject {
func doSomething()
}
class MyClass: MyProtocol {
func doSomething() {
print("Dělám něco")
}
}
class AnotherClass {
weak var delegate: MyProtocol?
}
Pokud protokol není omezen na AnyObject, nelze vytvořit slabý odkaz a je třeba použít silné odkazy nebo jiné mechanismy správy paměti.