Middle
¿Cómo se puede crear una referencia débil a una variable de tipo protocolo en Swift?
sobes.tech AI
Respuesta de la IA
Es necesario usar la palabra clave weak antes de declarar una variable de tipo protocolo. El protocolo debe declararse con la capacidad de aplicarse solo a clases: ya sea heredando de AnyObject, o usando la palabra clave class.
Ejemplo con herencia de AnyObject:
protocol MyDelegate: AnyObject {
func doSomething()
}
class MyClass {
weak var delegate: MyDelegate?
}
Ejemplo con la palabra clave class:
protocol AnotherDelegate: class { // Variante hasta Swift 4.1
func doSomethingElse()
}
// En versiones modernas de Swift (>= 4.1) basta con heredar de AnyObject
El uso de weak previene ciclos de referencias fuertes en casos como delegación, donde un objeto propietario referencia a su delegado, y este a su vez referencia al propietario (o estructura similar). La referencia débil no incrementa el contador de referencias del objeto.