Estoy tratando de crear un Diccionario (en realidad un HashSet ) codificado en un protocolo personalizado en Swift, pero me está dando el error en el título:
El protocolo 'myProtocol' solo se puede usar como una restricción genérica porque tiene requisitos de tipo Self o asociados
y no puedo hacer cara ni cruz.
protocol Observing: Hashable { }
var observers = HashSet<Observing>()
swift
generics
xcode6
swift-protocols
devios1
fuente
fuente

Respuestas:
El protocolo
Observinghereda del protocoloHashable, que a su vez hereda del protocoloEquatable. El protocoloEquatabletiene el siguiente requisito:Y un protocolo que contiene
Selfalgún lugar dentro de él no se puede usar en ningún lugar excepto en una restricción de tipo.Aquí hay una pregunta similar.
fuente
Equatableno debería implicar necesariamente,Equatableya que eso no es estrictamente necesario para generar un código hash.Dictionarynecesita poder saber si un objeto dado es realmente la clave correcta, porque es posible que dos objetos diferentes generen el mismo código hash. Hmm, eso es un poco complicado. Entonces el problema aquí es realmente conEquatable.Para resolver esto, podrías usar genéricos. Considere este ejemplo:
fuente