Sobes.tech
Middle

Wie kann man in Swift eine schwache Referenz auf eine Variable vom Protokolltyp erstellen?

sobes.tech KI

Antwort von AI

Es ist notwendig, das Schlüsselwort weak vor der Deklaration einer Variablen vom Protokolltyp zu verwenden. Das Protokoll sollte so deklariert werden, dass es nur auf Klassen anwendbar ist: entweder durch Vererbung von AnyObject oder durch Verwendung des Schlüsselworts class.

Beispiel mit Vererbung von AnyObject:

protocol MyDelegate: AnyObject {
    func doSomething()
}

class MyClass {
    weak var delegate: MyDelegate?
}

Beispiel mit dem Schlüsselwort class:

protocol AnotherDelegate: class { // Variante bis Swift 4.1
    func doSomethingElse()
}

// In modernen Swift-Versionen (>= 4.1) reicht es, von `AnyObject` zu erben

Die Verwendung von weak verhindert zyklische starke Referenzen, z.B. bei Delegierung, wo ein Besitzerobjekt auf den Delegierten verweist und dieser zurück auf den Besitzer (oder eine ähnliche Struktur). Eine schwache Referenz erhöht nicht den Referenzzähler des Objekts.