war ich vor kurzem der Lage, von einer Verlängerung zu ändern:Wie kann ich eine Erweiterung für CollectionType definieren, so dass ihre Methoden für Wörterbücher verfügbar sind?
extension Array where Element: Encodable { ... }
zu:
extension CollectionType where Generator.Element: Encodable { ... }
, um später in der Lage seinen Typ Einschränkungen mit CollectionType
und Encodable
in einer anderen Erweiterung anzuwenden.
Jetzt versuche ich, mit Dictionary
das Gleiche zu tun, zu ändern:
extension Dictionary where Key: StringLiteralConvertible, Value: Encodable { ... }
zu:
extension CollectionType where Generator.Element == (Key: StringLiteralConvertible, Value: Encodable) { ... }
Jedoch scheint die letztere kein gültiger Ersatz für den Dictionary
Typ zu sein , da jetzt in der Erweiterung definierte Methoden nicht in Wörterbüchern aufgerufen werden können.
Wie kann ich eine Erweiterung zu CollectionType
(oder vielleicht SequenceType
) definieren, so dass ihre Methoden für Wörterbücher verfügbar sind?
aktualisieren
Ich wollte anmerken, dass ich versucht habe, das Hinzufügen Typ Einschränkungen wie folgt, ohne Erfolg:
extension CollectionType where Self: protocol<Indexable, SequenceType, DictionaryLiteralConvertible>, Self.Key: protocol<Hashable, StringLiteralConvertible>, Self.Value: Encodable, Self.Generator.Element == (Key: StringLiteralConvertible, Value: Encodable) { ... }
Update 2
Seit user2194 039 gefragt - Ich würde es vorziehen, dies nicht tun zu müssen und die Erweiterungen auf Array
und Dictionary
zu behalten.
Allerdings muss ich auch Erweiterungen für die Optional
Varianten schreiben. Mein Verständnis ist, dass es aufgrund ihrer Verwendung von Generika nicht möglich ist, eine Typbeschränkung für Optional
zu schreiben, die es auf Array
oder Dictionary
beschränkt.
aus persönlicher Neugier (und in Licht Antwort: Kann ich fragen, welchen Nutzen Sie haben, wenn Sie 'CollectionType' anstelle von' Dictionary' erweitern, wenn die Einschränkungen Ihrer Erweiterung so stark mit der Struktur eines Diktats verknüpft sind Onary? P.S. Eine echte Frage! – justinpawela
@ user2194039 kurz, JSON-Codierung. Bitte sehen Sie hier für weitere Informationen: https://github.com/edwardaux/Ogra/pull/1 –
@ user2194039 Ich missverstanden Ihre Frage. Wie in der Pull-Anforderung gezeigt, musste ich auch Erweiterungen für 'Optional' erstellen und konnte' Array' oder 'Dictionary' nicht in den Typ-Einschränkungen für diese verwenden. –