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