Ich versuche, ein Wörterbuch (eigentlich ein HashSet ) zu erstellen, das auf einem benutzerdefinierten Protokoll in Swift verschlüsselt ist , aber es gibt mir den Fehler im Titel:
Das Protokoll 'myProtocol' kann nur als generische Einschränkung verwendet werden, da es Self- oder zugehörige Typanforderungen hat
und ich kann weder Kopf noch Zahl daraus machen.
protocol Observing: Hashable { }
var observers = HashSet<Observing>()
swift
generics
xcode6
swift-protocols
devios1
quelle
quelle
Antworten:
Das Protokoll
Observing
erbt vom ProtokollHashable
, das wiederum vom Protokoll erbtEquatable
. Das ProtokollEquatable
hat folgende Anforderung:Und ein Protokoll, das
Self
irgendwo darin enthalten ist, kann nur in einer Typbeschränkung verwendet werden.Hier ist eine ähnliche Frage.
quelle
Equatable
nicht unbedingt zu implizieren,Equatable
da dies nicht unbedingt erforderlich ist, um einen Hash-Code zu generieren.Dictionary
muss möglich sein zu wissen, ob ein bestimmtes Objekt tatsächlich der richtige Schlüssel ist, da zwei verschiedene Objekte denselben Hash-Code generieren können. Hmm, das ist ein bisschen schwierig. Das Problem hier ist also wirklich mitEquatable
.Um dies zu lösen, könnten Sie Generika verwenden. Betrachten Sie dieses Beispiel:
quelle