Sobes.tech
Middle

Jak utworzyć słabą referencję do zmiennej typu protokół w Swift?

sobes.tech AI

Odpowiedź od AI

Należy użyć słowa kluczowego weak przed deklaracją zmiennej typu protokół. Protokół powinien być zadeklarowany tak, aby można go było stosować tylko do klas: dziedzicząc po AnyObject, lub używając słowa kluczowego class.

Przykład dziedziczenia po AnyObject:

protocol MyDelegate: AnyObject {
    func doSomething()
}

class MyClass {
    weak var delegate: MyDelegate?
}

Przykład z użyciem słowa kluczowego class:

protocol AnotherDelegate: class { // Wariant do Swift 4.1
    func doSomethingElse()
}

// W nowoczesnych wersjach Swift (>= 4.1) wystarczy dziedziczenie po `AnyObject`

Użycie weak zapobiega cyklicznym silnym referencjom, na przykład w delegacji, gdzie obiekt właścicielski odwołuje się do delegata, a delegat z powrotem do właściciela (lub podobnej struktury). Słaba referencja nie zwiększa licznika referencji obiektu.