【发布时间】:2017-01-22 18:33:27
【问题描述】:
我想做这样的事情:使用字符串枚举访问我的字典值。我试图重载字典的下标但没有成功。
访问字典:
let district = address[JsonKeys.district]
JsonKeys 在哪里:
enum JsonKeys: String {
case key1
case key2
case key...
}
我的下标重载如下:
extension Dictionary where Key: StringLiteralConvertible, Value: AnyObject {
subscript(index: FOJsonKeys) -> AnyObject {
get {
return self[ index.rawValue] as! AnyObject
}
}
}
我收到以下消息:
**Cannot subscript a value of type 'Dictionary<Key, Value>' with an index of type 'String'**
我哪里错了?
PS:不想这样做(这会纠正错误,但这样代码不可读):
let district = address[JsonKeys.district.rawValue]
字典是 AlamoFire 给我的 Json 解析字典。我很确定我不能改变它的类型。
【问题讨论】:
-
这可能指向更深层次的问题。您应该尽快将这些字典解析为结构或类,因此必须处理 JSON 字符串键的代码应该非常本地化。如果您需要在程序中的多个位置使用这些键,则您的模型层可能不正确。失败的原因是“StringLiteralConvertible”不是完全字符串。目前不可能在 Swift 中编写这个扩展(这是一个已知的编译器限制,但是当你需要它时,你几乎总是在做其他错误)。
-
这就是这段代码的目标,将Json字典解析成一个类。我不想使用字符串键。在我看来,使用 String 枚举更健壮。
-
这很公平;在下面回答。
-
请注意,在 Swift 3.1 中,支持具体的同类型要求,所以你可以写
extension Dictionary where Key == String:)
标签: ios swift dictionary overloading subscript