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