我正在尝试在 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"])
有人告诉我:
Cannot subscript a value of type `[[String : AnyObject]]' with an index of type 'String'
最佳答案
简答:
使用 [String: Any]
而不是 [String: AnyObject]
。
更长的答案::
问题是 Foundation 自动将 Swift 核心类型桥接到 Cocoa。这就是说,由于 AnyObject
约束,Swift Dictionary
被自动桥接到 NSDictionary
,Swift 结构不能转换为 AnyObject
和 Dictionary
是一个结构。
print
函数调用 description
属性,对于 NSDictionary
来说,它带有花括号。
当指定 Any
而不是 AnyObject
时,Swift 只会将变量类型设置为带有方括号 description
的 Dictionary。
附言
关于 subscript
,我想你那里有一个数组,所以你应该使用像 items[0]["location"]!["store"]
这样的东西。
关于json - 嵌套字典 Swift 花括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39377904/