web-dev-qa-db-fra.com

Que signifie "Protocole ... ne peut être utilisé que comme contrainte générique car il a des exigences de type Self ou associées"?

J'essaie de créer un dictionnaire (en fait un HashSet ) associé à un protocole personnalisé dans Swift, mais il me donne l'erreur dans le titre:

Le protocole 'myProtocol' ne peut être utilisé que comme contrainte générique car il a des exigences de type Self ou associé

et je ne peux pas en faire des têtes ni des queues.

protocol Observing: Hashable { }

var observers = HashSet<Observing>()
115
devios1

Le protocole Observing hérite du protocole Hashable, qui à son tour hérite du protocole Equatable. Le protocole Equatable a la condition suivante:

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

Et un protocole contenant Self quelque part à l'intérieur ne peut être utilisé nulle part sauf dans une contrainte de type.

Ici est une question similaire.

80
newacct

Pour résoudre ce problème, vous pouvez utiliser des génériques. Considérons cet exemple:

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