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>()
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.
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>()
}