[swift-users] Why can't I declare subscript<T> ?
Jens Alfke
jens at mooseyard.com
Mon Apr 11 16:04:15 CDT 2016
Why can't a custom subscript operator be made generic? That is, Swift allows this inside a class/struct:
func get<T>(key: String) -> T? { … }
but it doesn’t allow
subscript<T>(key: String) -> T? { … } // syntax error at the “<"
This doesn’t make sense to me, since subscripts are just syntactic sugar; the subscript operator ought to support whatever a named function can support.
In this case I’m implementing a class that contains a JSON payload, and I want clients to be able to flexibly access properties of the JSON and assign them to values, with implicit type-casting, i.e.
var name: String = revision[“name”] // invoke subscript with T=String
var age: Int = revision[“age”] // invoke subscript with T=Int
(I got this idea from the Tailor library, although it doesn’t use subscripts, for reasons I now understand.)
—Jens
PS: I’m using Xcode 7.3; I believe that’s Swift 2.2?
More information about the swift-users
mailing list