Geçenlerde gelen bir uzantısı değiştirmek başardı sıraylaCollectionType için bir uzantı nasıl tanımlayabilirim, böylece yöntemleri sözlüklerde kullanılabilir mi?</p> <pre><code>extension Array where Element: Encodable { ... } </code></pre> <p>için:
extension CollectionType where Generator.Element: Encodable { ... }
sonra farklı uzantısında CollectionType
ve Encodable
tip kısıtlamaları uygulamak mümkün.
extension Dictionary where Key: StringLiteralConvertible, Value: Encodable { ... }
için:
extension CollectionType where Generator.Element == (Key: StringLiteralConvertible, Value: Encodable) { ... }
Ancak, ikinci Dictionary
türü için geçerli bir değişiklik olmadığı görülüyor
Dictionary
ile aynı şeyi yapmaya çalışıyorum Artık uzantı içinde tanımlanan yöntemler sözlüklere çağrılmaz.
CollectionType
(veya belki SequenceType
) uzantılarını, sözlüklerinin sözlüklerde kullanılabilmesi için nasıl tanımlayabilirim?
Güncelleme başarılı olamadı ben şöyle ben tip sınırlamalar ekleyerek denedim dikkat etmek istedik
:
extension CollectionType where Self: protocol<Indexable, SequenceType, DictionaryLiteralConvertible>, Self.Key: protocol<Hashable, StringLiteralConvertible>, Self.Value: Encodable, Self.Generator.Element == (Key: StringLiteralConvertible, Value: Encodable) { ... }
Güncelleme 2
Kullanıcı2194'ten beri 039 sordu - bunu yapmak ve uzantıları Array
ve Dictionary
tutmak için tercih etmem. Ancak, Optional
değişkenleri için de uzantılar yazmam gerekiyor. Benim anlayışım, jeneriklerin kullanımı nedeniyle, Optional
için Array
veya Dictionary
'a sınırlayan bir tür kısıtlaması yazmanın mümkün olmamasıdır.
cevabınızın), uzantınızdaki kısıtlamaların bir dicti yapısına çok bağlı olduğu durumlarda, 'Dictionary' yerine 'CollectionType' sözcüğünü genişletmenin ne gibi bir faydası olduğunu sorabilir miyim? onary? Not; Gerçek bir soru! – justinpawela
@ user2194039 kısaca, JSON kodlaması. Daha fazla bilgi için buraya bakınız: https://github.com/edwardaux/Ogra/pull/1 –
@ user2194039 Sorunuzu yanlış anladım. Çekme isteğinde gösterildiği gibi, 'İsteğe Bağlı' için uzantılar oluşturmam gerekiyordu ve bunlar için tür kısıtlamalarında 'Array' veya 'Sözlük' kullanılamadı. –