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.