Sobes.tech
Junior — Middle

È possibile creare un riferimento debole a una proprietà che implementa un protocollo?

sobes.tech AI

Risposta dell'AI

In Swift, non è possibile creare un riferimento weak (debole) a una proprietà che implementa un protocollo se questo protocollo non è limitato alle classi (protocollo solo per classi). Questo perché i riferimenti weak possono essere applicati solo ai tipi di riferimento (classi), mentre i protocolli possono essere implementati sia da classi che da strutture o enumerazioni.

Per usare un riferimento weak a una proprietà di tipo protocollo, è necessario limitare il protocollo ereditando da AnyObject, ad esempio:

protocol MyProtocol: AnyObject {
    func doSomething()
}

class MyClass: MyProtocol {
    func doSomething() {
        print("Fare qualcosa")
    }
}

class AnotherClass {
    weak var delegate: MyProtocol?
}

Se il protocollo non è limitato a AnyObject, non è possibile creare un riferimento weak, e sarà necessario usare riferimenti forti o altri meccanismi di gestione della memoria.