Byłem niedawno w stanie zmienić rozszerzenie z:Jak zdefiniować rozszerzenie do elementu CollectionType, aby jego metody były dostępne dla słowników?
extension Array where Element: Encodable { ... }
do:
extension CollectionType where Generator.Element: Encodable { ... }
aby później móc zastosować ograniczenia typ z CollectionType
i Encodable
w innym rozszerzeniem.
Teraz staram się zrobić to samo z Dictionary
, zmieniając:
extension Dictionary where Key: StringLiteralConvertible, Value: Encodable { ... }
do:
extension CollectionType where Generator.Element == (Key: StringLiteralConvertible, Value: Encodable) { ... }
Jednakże ten ostatni nie wydaje się być ważny substytut typu Dictionary
, ponieważ metod zdefiniowanych w rozszerzeniu nie można wywoływać w słownikach.
Jak zdefiniować rozszerzenie do CollectionType
(lub może SequenceType
), aby jego metody były dostępne dla słowników?
Aktualizacja
Chciałem zauważyć, że próbowałem dodanie ograniczenia typu następująco, bez powodzenia:
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
Od użytkownika2194 039 pytanie - wolałbym nie robić tego i zachować rozszerzenia na Array
i Dictionary
.
Muszę jednak również napisać rozszerzenia dla wariantów Optional
. Rozumiem, że ze względu na użycie generycznych, nie można napisać ograniczenia typu dla Optional
, które ogranicza to do Array
lub Dictionary
.
Out osobistej ciekawości (iw świetle odpowiedzi), czy mogę zapytać, jakie korzyści rozszerzasz 'CollectionType' zamiast' Dictionary', kiedy ograniczenia twojego rozszerzenia są tak głęboko powiązane ze strukturą dyktowania onary? P.S. Prawdziwe pytanie! – justinpawela
@ user2194039 w skrócie, kodowanie JSON. Więcej informacji można znaleźć tutaj: https://github.com/edwardaux/Ogra/pull/1 –
@ user2194039 Źle zrozumiałem twoje pytanie. Jak pokazano w żądaniu ściągnięcia, musiałem również utworzyć rozszerzenia dla "Opcjonalnie" i nie mogłem użyć 'Tablicy' lub' Słownika' w ograniczeniach typów dla tych. –