Recentemente sono stato in grado di cambiare un'estensione da:Come definire un'estensione su CollectionType in modo che i suoi metodi siano disponibili per i dizionari?
extension Array where Element: Encodable { ... }
a:
extension CollectionType where Generator.Element: Encodable { ... }
per essere successivamente in grado di applicare vincoli di tipo con CollectionType
e Encodable
in una diversa estensione.
Ora sto cercando di fare la stessa cosa con Dictionary
, cambiando:
extension Dictionary where Key: StringLiteralConvertible, Value: Encodable { ... }
a:
extension CollectionType where Generator.Element == (Key: StringLiteralConvertible, Value: Encodable) { ... }
Tuttavia, quest'ultimo non sembra essere un valido sostituto per il tipo Dictionary
, poiché ora i metodi definiti all'interno non possono essere chiamati sui dizionari.
Come è possibile definire un'estensione su CollectionType
(o forse SequenceType
) in modo che i relativi metodi siano disponibili per i dizionari?
Aggiornamento
ho voluto sottolineare che ho provato ad aggiungere vincoli di tipo come segue, senza successo:
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
Dal momento che user2194 039 chiesto - Preferirei non doverlo fare e mantenere le estensioni a Array
e Dictionary
.
Tuttavia, ho anche bisogno di scrivere estensioni per le varianti Optional
. La mia comprensione è che a causa del loro uso di generici, non è possibile scrivere un vincolo di tipo per Optional
che lo vincola a Array
o .
Per curiosità personali (e alla luce della tua risposta), posso chiedere quale vantaggio ottieni estendendo 'CollectionType' invece di' Dictionary', quando i vincoli sul tuo interno sono così profondamente legati alla struttura di un dicti onary? Post scriptum Una vera domanda! – justinpawela
@ user2194039 in breve, codifica JSON. Si prega di vedere qui per ulteriori informazioni: https://github.com/edwardaux/Ogra/pull/1 –
@ user2194039 ho frainteso la tua domanda. Come mostrato nella richiesta pull, avevo anche bisogno di creare estensioni per 'Optional' e non potevo usare' Array' o 'Dictionary' nei vincoli di tipo per quelli. –