Middle
Como criar uma referência fraca a uma variável do tipo protocolo em Swift?
sobes.tech IA
Resposta da IA
É necessário usar a palavra-chave weak antes de declarar uma variável do tipo protocolo. O protocolo deve ser declarado de forma que possa ser aplicado apenas a classes: herdando de AnyObject, ou usando a palavra-chave class.
Exemplo com herança de AnyObject:
protocol MyDelegate: AnyObject {
func doSomething()
}
class MyClass {
weak var delegate: MyDelegate?
}
Exemplo com a palavra-chave class:
protocol AnotherDelegate: class { // Variante até Swift 4.1
func doSomethingElse()
}
// Em versões modernas do Swift (>= 4.1), basta herdar de `AnyObject`
O uso de weak previne ciclos de referências fortes em casos como delegação, onde um objeto proprietário referencia seu delegado, e este por sua vez referencia o proprietário (ou estrutura similar). A referência fraca não aumenta o contador de referências do objeto.