使用Swift 4.2,我试图编写一个通用系统来摆脱字符串,而将其作为字典的键来使用枚举。
这是我随附的:
extension Dictionary where Key == String {
subscript<T : RawRepresentable>(key: T) -> Value? where T.RawValue == String {
get { return self[key.rawValue] }
set { self[key.rawValue] = newValue }
}
}
这将进行编译,并且注定要以RawRepresentable
为键的每个String
都将以Dictionary
原始值作为键的任何String
类型作为下标的键。
不幸的是,当我执行以下操作时,它无法编译:
enum MovieKey: String {
case movieId = "movie_id"
case movies = "movies"
}
var dic = [String:String]()
dic[key: MovieKey.movieId] = "abc123" // error
我收到以下编译错误:Cannot subscript a value of type '[String : String]' with an index of type '(key: MovieKey)'
除非我输错了,否则dic
是一个以Dictionary
为键的String
,而MovieKey
是RawRepresentable
,原始值为{{ 1}}输入了...
如果有人可以解释我在做什么错,请先谢谢。
答案 0 :(得分:1)
问题是您没有正确使用下标。您不应该为下标调用提供任何参数标签,只需提供enum
值即可。
dic[MovieKey.movieId] = "abc123"
可以正常编译。