Que signifie «Protocole… ne peut être utilisé que comme une 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 ) avec 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ées

et je ne peux pas en faire la tête ni la queue.

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

Mettre à jour:

Pour la meilleure explication possible de la raison pour laquelle c’est la façon dont c’est, consultez cette vidéo .


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

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

Et un protocole qui contient Self quelque part en son sein ne peut être utilisé nulle part sauf dans une contrainte de type.

Voici une question similaire.

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

 class GenericClass { var observers = HashSet() }