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.