Junior — Middle
Je možné vytvoriť slabé odkaz na vlastnosť, ktorá implementuje protokol?
sobes.tech AI
Odpoveď od AI
V Swift nie je možné vytvoriť slabú (weak) referenciu na vlastnosť, ktorá implementuje protokol, ak tento protokol nie je obmedzený na triedy (class-only protocol). To je spôsobené tým, že slabé referencie môžu byť použité iba na referenčné typy (triedy), zatiaľ čo protokoly môžu byť implementované ako triedami, tak štruktúrami alebo enumeráciám.
Ak chcete použiť slabú referenciu na vlastnosť typu protokolu, je potrebné obmedziť protokol dedičstvom od AnyObject, napríklad:
protocol MyProtocol: AnyObject {
func doSomething()
}
class MyClass: MyProtocol {
func doSomething() {
print("Niečo robím")
}
}
class AnotherClass {
weak var delegate: MyProtocol?
}
Ak protokol nie je obmedzený na AnyObject, nie je možné vytvoriť slabú referenciu a je potrebné použiť silné referencie alebo iné mechanizmy správy pamäti.