Avatar ·

Cómo hacer una referencia débil a un protocolo en Swift puro (sin @objc)

¡Hola a todos! Estoy aprendiendo Swift y tratando de implementar el patrón delegado, pero me encontré con un problema de fuga de memoria. Tengo un protocolo: ```swift protocol MyDelegate: class { func didSomething() } class MyClass { var delegate: MyDelegate? func doSomething() { delegate?.didSomething() } } ``` Sé que en Objective-C se podía usar `weak` para protocolos marcados con `@objc`. Pero quiero escribir en Swift puro. Cuando intento hacer: ```swift weak var delegate: MyDelegate? ``` El compilador da un error: `'weak' may only be applied to class and class-bound protocol types`. Leí que necesito heredar el protocolo de `AnyObject` o usar `class` en la definición del protocolo. Pero no entiendo completamente cómo funciona esto y cuál es la diferencia. Mi pregunta principal: ¿cómo declarar correctamente un protocolo para poder usar `weak` en la propiedad delegada y así evitar un retain cycle? Quiero que el delegado pueda ser de cualquier tipo (clase