Sobes.tech
Junior — Middle

É possível criar uma referência fraca para uma propriedade que implementa um protocolo?

sobes.tech IA

Resposta da IA

Em Swift, não é possível criar uma referência fraca (weak) a uma propriedade que implementa um protocolo se esse protocolo não estiver limitado a classes (protocolo apenas para classes). Isso ocorre porque referências fracas só podem ser aplicadas a tipos de referência (classes), e protocolos podem ser implementados tanto por classes quanto por estruturas ou enumerações.

Para usar uma referência weak a uma propriedade com tipo de protocolo, é necessário restringir o protocolo herdando de AnyObject, por exemplo:

protocol MyProtocol: AnyObject {
    func doSomething()
}

class MyClass: MyProtocol {
    func doSomething() {
        print("Fazendo algo")
    }
}

class AnotherClass {
    weak var delegate: MyProtocol?
}

Se o protocolo não for limitado a AnyObject, não é possível criar uma referência weak, sendo necessário usar referências fortes ou outros mecanismos de gerenciamento de memória.