Sobes.tech
Junior — Middle

¿Se puede crear una referencia débil a una propiedad que implementa un protocolo?

sobes.tech AI

Respuesta de la IA

En Swift, no se puede crear una referencia débil (weak) a una propiedad que implementa un protocolo si ese protocolo no está restringido a clases (protocolo solo para clases). Esto se debe a que las referencias débiles solo pueden aplicarse a tipos de referencia (clases), y los protocolos pueden ser implementados tanto por clases como por estructuras o enumeraciones.

Para usar una referencia weak a una propiedad con tipo de protocolo, es necesario restringir el protocolo mediante la herencia de AnyObject, por ejemplo:

protocol MyProtocol: AnyObject {
    func doSomething()
}

class MyClass: MyProtocol {
    func doSomething() {
        print("Haciendo algo")
    }
}

class AnotherClass {
    weak var delegate: MyProtocol?
}

Si el protocolo no está restringido a AnyObject, no se puede crear una referencia weak, y será necesario usar referencias fuertes u otros mecanismos de gestión de memoria.