O que significa “Protocolo… só pode ser usado como uma restrição genérica porque tem requisitos de Self ou de tipo associado”?

Eu estou tentando criar um dictionary (na verdade, um HashSet ) com chave em um protocolo personalizado no Swift, mas está me dando o erro no título:

O protocolo ‘myProtocol’ só pode ser usado como uma restrição genérica porque possui requisitos de tipo próprio ou associado

e eu não posso fazer cara nem coroa disso.

protocol Observing: Hashable { } var observers = HashSet() 

Atualizar:

Para a melhor explicação possível de por que esta é a maneira que é, confira este vídeo .


Protocolo Observing herda do protocolo Hashable , que por sua vez herda do protocolo Equatable . O Protocolo Equatable tem o seguinte requisito:

 func ==(lhs: Self, rhs: Self) -> Bool 

E um protocolo que contém o Self algum lugar dentro dele não pode ser usado em lugar algum, exceto em uma restrição de tipo.

Aqui está uma pergunta semelhante.

Para resolver isso, você poderia usar genéricos. Considere este exemplo:

 class GenericClass { var observers = HashSet() }