> On Apr 14, 2016, at 4:58 PM, Jens Alfke 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’”.
> 
> So is there a way I can add a method to a class, where the method depends on 
> one of the type parameters being a specific type? For example, let’s say I 
> want a “concatenatedKeys” method that returns all the Dictionary’s keys 
> concatenated into a string with commas between them.
> 
> (The actual reason I’m doing this is more complicated, but it has to do with 
> JSON encoding — JSON dictionary keys have to be strings, so I want to be 
> type-safe and make my encoding methods available only for Dictionary<String, 
> ___>.)
> 
> —Jens

I thought I replied last week but I don’t see it.

It looks like you can make it work using StringLiteralConvertible. Based on 
this:

http://stackoverflow.com/questions/32610150/extension-of-dictionary-where-string-anyobject

This works:

extension Dictionary where Key: StringLiteralConvertible, Value: Any {
    func testMethod() -> String {
        return "test"
    }
}

var d: [String: Int] = [:]
d["abc"] = 1
print(d.testMethod())

HTH,
Dave Reed

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to