Sobes.tech
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ą.