Avatar ·

Como fazer uma referência fraca a um protocolo em Swift puro (sem @objc)

Olá a todos! Estou aprendendo Swift e tentando implementar o padrão delegate, mas me deparei com um problema de vazamento de memória. Eu tenho um protocolo: ```swift protocol MyDelegate: class { func didSomething() } class MyClass { var delegate: MyDelegate? func doSomething() { delegate?.didSomething() } } ``` Eu sei que em Objective-C era possível usar `weak` para protocolos marcados com `@objc`. Mas quero escrever em Swift puro. Quando tento fazer: ```swift weak var delegate: MyDelegate? ``` O compilador dá erro: `'weak' may only be applied to class and class-bound protocol types`. Li que é necessário fazer o protocolo herdar de `AnyObject` ou usar `class` na definição do protocolo. Mas não entendo completamente como isso funciona e qual é a diferença. Minha principal pergunta: como declarar corretamente um protocolo para poder usar `weak` na propriedade delegate e, ao mesmo tempo, evitar retain cycle? Quero que o delegate possa ser qualquer tipo (class