used type only has generic functions constraint because associated swift generics xcode6 swift-protocols

type - generic functions swift 4



¿Qué significa "Protocolo... solo se puede usar como restricción genérica porque tiene requisitos de tipo propio o asociado"? (2)

HashSet crear un diccionario (en realidad, un HashSet ) codificado en un protocolo personalizado en Swift, pero me da el error en el título:

El protocolo ''myProtocol'' solo se puede usar como restricción genérica porque tiene requisitos de tipo propio o asociado

y no puedo hacer cabezas ni colas de eso.

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

Actualizar:

Para obtener la mejor explicación posible de por qué es así, mira este video .


El protocolo Observing hereda del protocolo Hashable , que a su vez hereda del protocolo Equatable . El protocolo Equatable tiene el siguiente requisito:

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

Y un protocolo que contenga Self en su interior no se puede usar en ninguna parte excepto en una restricción de tipo.

Here hay una pregunta similar.


Para resolver esto podrías usar genéricos. Considera este ejemplo:

class GenericClass<T: Observing> { var observers = HashSet<T>() }