【发布时间】:2017-08-31 14:09:23
【问题描述】:
我有一个转换为字典对象的 json。转储时,您可以看到返回以下内容
▿ (2 elements)
- key: "LivingArea"
- value: NULL #2
- super: NSString
- super: NSObject
假设 userDict 是我的字典对象
let LivingArea = userDict?["LivingArea"] as? Int
返回:可选(5)
但我需要打开它,所以我尝试
let LivingArea = userDict?["LivingArea"] as! Int
这会使应用程序崩溃,原因如下: 无法将类型“NSTaggedPointerString”(0x111601d60)的值转换为“NSNumber”(0x110c0e4a8)。
我如何获得 LivingArea 展开的价值。为什么它的行为不像 Int? 这是json的一个例子
["District": 4, "Napa": 43, "LivingArea": 2, "CityName": LA, "CityCode": 1103]
谢谢
【问题讨论】:
-
该错误清楚地表明该值是
string而不是(NS)number。请以小写字母开头命名变量。 -
似乎并非您的 JSON 中的所有条目都具有
LivingArea的数值。您应该将变量保留为可选,并在需要时将其解包。不要强行打开,否则你会崩溃。另一种选择是使用let livingArea = userDict?["LivingArea"] as? Int ?? 0设置默认值 0 -
@AshokKumarReddyPolu 我得到以下信息:无法使用类型为“(Any?)”的参数列表调用类型“Int”的初始化程序
-
是的,忽略这个建议。它仍然有一个强制展开,所以它会在缺少值时崩溃
-
@Paulw11 成功了。谢谢
标签: swift