【问题标题】:Nested dictionaries Swift curly braces?嵌套字典 Swift 花括号?
【发布时间】:2017-01-15 14:48:38
【问题描述】:

我正在尝试在 Swift 中创建一个嵌套字典,以便稍后将其更改为 JSON。我是这样设置的:

let item: [String: AnyObject] = [
        "item": item,
        "price": price,
        "date": date,
        "time": time,
        "location": [
          "store": "Store name",
          "address": "1234 Untitled Dr.",
          "city": "City",
          "state": "CA",
          "zip": "12345"
        ]
      ]
print(item)

当我运行它时,输出是这样的:

["price": 15.69, "location": {
    address = "12350 Carmel MT Road";
    city = "City";
    state = CA;
    store = "Store name";
    zip = 12345;
}, "item": item, "date": , "time": ]

位置值应该是嵌套字典。为什么定位部分周围有花括号?为什么有引号的值不一致?此外,当我尝试访问时:

print(items["location"]!["store"])

有人告诉我:

不能用 `[[String : AnyObject]]' 类型的值下标 “字符串”类型的索引

【问题讨论】:

  • 字典是结构体,我认为你需要做 [String:Any]
  • 你不能下标[[String:AnyObject]],因为那是一个字典数组。
  • 尝试打印:print((item["location"] as? [String: AnyObject])?["store"])
  • 看起来您正在访问items,它是一个数组,而不是item。看看我下面的答案。

标签: json swift dictionary


【解决方案1】:

简答
使用[String: Any] 而不是[String: AnyObject]

更长的答案:
问题是 Foundation 自动将 Swift 核心类型连接到 Cocoa。据说 Swift Dictionary 会自动桥接到 NSDictionary 因为 AnyObject 约束,Swift 结构不能转换为 AnyObjectDictionary 是一个结构。

print 函数调用description 属性,对于NSDictionarys,该属性带有花括号。

当指定Any 而不是AnyObject 时,Swift 只会将变量类型设置为带有方括号description 的Dictionary。

附言
关于subscript 的事情,我认为你那里有一个数组,所以你应该使用items[0]["location"]!["store"] 之类的东西。

【讨论】:

  • 有道理!另外,感谢PS,我完全忘记了这一点。应该更好地命名我的数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-27
  • 1970-01-01
  • 2019-05-02
  • 2013-06-30
  • 2021-10-13
  • 2013-04-21
  • 2013-09-15
相关资源
最近更新 更多