Middle
Come si crea un riferimento debole a una variabile di tipo protocollo in Swift?
sobes.tech AI
Risposta dell'AI
È necessario usare la parola chiave weak prima di dichiarare una variabile di tipo protocollo. Il protocollo deve essere dichiarato in modo che possa essere applicato solo alle classi: ereditando da AnyObject, o usando la parola chiave class.
Esempio con ereditarietà da AnyObject:
protocol MyDelegate: AnyObject {
func doSomething()
}
class MyClass {
weak var delegate: MyDelegate?
}
Esempio con la parola chiave class:
protocol AnotherDelegate: class { // Variante fino a Swift 4.1
func doSomethingElse()
}
// Nelle versioni moderne di Swift (>= 4.1) basta ereditare da `AnyObject`
L'uso di weak previene cicli di riferimenti forti, ad esempio nella delega, dove un oggetto proprietario fa riferimento al delegato, e quest'ultimo a sua volta fa riferimento al proprietario (o struttura simile). La referenza debole non aumenta il contatore di riferimenti dell'oggetto.