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.