You know… if protocols could define which types can implement them, that could be made to be the same thing: protocol _String {…} `syntax which restricts instances of _String to be a` String extension Dictionary where Key: _String {…} //Same as "where Key == String”, because that’s the only type allowed to implement _String
Is that worth writing proposal over? Or is just saying this: protocol _String { func asString() -> String } extension String : _String { func asString -> String { return self } } close enough? - Dave Sweeris > On Apr 14, 2016, at 4:31 PM, Brent Royal-Gordon via swift-users > <swift-users@swift.org> wrote: > >> It appears that you can’t extend a generic class/struct with a requirement >> that a type parameter inherit from a non-protocol: >> extension Dictionary where Key : String { … } >> The above produces the error “Type ‘Key’ constrained to non-protocol type >> ‘String’”. > > You can't do `Key: String` because `String`, as a struct, cannot have any > subtypes. `Key: NSString`, for instance, works. > > What you really want to do is say `Key == String`, but this isn't supported > right now. (My understanding is that this is basically just an implementation > shortcut they took.) > > One workaround is to define your own protocol and constrain to that: > > protocol _StringType: Hashable { > // Include the String APIs you need to use here. > } > extension String: _StringType {} > extension Dictionary where Key: _StringType { … } > > -- > Brent Royal-Gordon > Architechies > > _______________________________________________ > swift-users mailing list > swift-users@swift.org > https://lists.swift.org/mailman/listinfo/swift-users _______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users