Estou tentando criar um dicionário (na verdade um HashSet ) codificado 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 não posso fazer cara nem coroa disso.
protocol Observing: Hashable { }
var observers = HashSet<Observing>()
swift
generics
xcode6
swift-protocols
devios1
fonte
fonte
Respostas:
O protocolo
Observing
herda do protocoloHashable
, que por sua vez herda do protocoloEquatable
. O protocoloEquatable
tem o seguinte requisito:E um protocolo que contém
Self
algum lugar dentro dele não pode ser usado em qualquer lugar, exceto em uma restrição de tipo.Aqui está uma pergunta semelhante.
fonte
Equatable
não deve implicar necessariamente,Equatable
pois não é estritamente necessário gerar um código hash.Dictionary
precisa saber se um determinado objeto é realmente a chave correta, porque é possível que dois objetos diferentes gerem o mesmo código de hash. Hmm, isso é um pouco complicado. Então, o problema aqui é realmente comEquatable
.Para resolver isso, você pode usar genéricos. Considere este exemplo:
fonte