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

Reply via email to