Junior — Middle
Czy można utworzyć słabe odniesienie do właściwości implementującej protokół?
sobes.tech AI
Odpowiedź od AI
W Swift nie można utworzyć słabej (weak) referencji do właściwości, która implementuje protokół, jeśli ten protokół nie jest ograniczony do klas (protocol tylko dla klas). Wynika to z faktu, że słabe referencje mogą być stosowane tylko do typów referencyjnych (klas), a protokoły mogą być implementowane zarówno przez klasy, jak i struktury czy wyliczenia.
Aby użyć słabej referencji do właściwości typu protokół, należy ograniczyć protokół dziedziczeniem od AnyObject, na przykład:
protocol MyProtocol: AnyObject {
func doSomething()
}
class MyClass: MyProtocol {
func doSomething() {
print("Robię coś")
}
}
class AnotherClass {
weak var delegate: MyProtocol?
}
Jeśli protokół nie jest ograniczony do AnyObject, nie można utworzyć słabej referencji, i trzeba używać silnych referencji lub innych mechanizmów zarządzania pamięcią.