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
Observing
hereda del protocoloHashable
, que a su vez hereda del protocoloEquatable
. El protocoloEquatable
tiene el siguiente requisito:Y un protocolo que contiene
Self
algú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
Equatable
no debería implicar necesariamente,Equatable
ya que eso no es estrictamente necesario para generar un código hash.Dictionary
necesita 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