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