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