J'essaie de créer un dictionnaire (en fait un HashSet ) basé sur un protocole personnalisé dans Swift, mais cela 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ées
et je ne peux pas en faire la tête ni la queue.
protocol Observing: Hashable { }
var observers = HashSet<Observing>()
swift
generics
xcode6
swift-protocols
devios1
la source
la source
Réponses:
Le protocole
Observing
hérite du protocoleHashable
, qui à son tour hérite du protocoleEquatable
. Le protocoleEquatable
a l'exigence suivante:Et un protocole qui contient
Self
quelque part à l'intérieur ne peut être utilisé nulle part sauf dans une contrainte de type.Voici une question similaire.
la source
Equatable
ne devrait pas nécessairement impliquerEquatable
puisque ce n'est pas strictement nécessaire pour générer un code de hachage.Dictionary
faut pouvoir savoir si un objet donné est effectivement la bonne clé, car il est possible que deux objets différents génèrent le même code de hachage. Hmm, c'est un peu délicat. Le problème ici est donc vraiment avecEquatable
.Pour résoudre ce problème, vous pouvez utiliser des génériques. Prenons cet exemple:
la source