处理"无法转换类型' NSTaggedPointerString'到' NSNumber' "

时间:2017-08-31 14:09:24

标签: swift

我有一个转向字典对象的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]

谢谢

1 个答案:

答案 0 :(得分:3)

似乎并非JSON中的所有条目都具有LivingArea的数值。

一种选择是将变量保持为可选,并在需要时将其展开。不要强行解包,否则当值丢失或没有整数时你会崩溃。

您应该进行防御性编码,特别是在处理来自外部源的数据时。

另一种选择是使用

将默认值设置为0
let livingArea = userDict?["LivingArea"] as? Int ?? 0