Sobes.tech
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.