Int工作时Int64不起作用

sar*_*rah 7 json ios swift

我收到一个JSON,我想解析它以获得一个值.我这样做

let ddd = oneJson["restaurantId"] as! Int
print("ddd = \(ddd)")
let restaurantId = oneJson["restaurantId"] as! Int64
Run Code Online (Sandbox Code Playgroud)

如你所见,我正在解析相同的字段.这是我的JSON

"location":"location here location","restaurantId":0
Run Code Online (Sandbox Code Playgroud)

print语句工作正常,但我得到了一个例外 oneJson["restaurantId"] as! Int64

在此输入图像描述

tbo*_*son 8

我很喜欢这个怪癖(不是).

这是我所知道的语言中最不直观的问题之一.所以事实证明,当你得到一个AnyObject类型的字典时,Ints,Doubles,Floats,不会存储为Swift本机类型.他们被存储为......惊喜!的NSNumber.

这会导致一系列不直观的行为,例如类型检查AnyObjects以查看您是否有Double或Int(无法完成).

出于同样的原因,您的代码失败了.将其更改为:

let ddd = oneJson["restaurantId"] as! Int
print("ddd = \(ddd)")
let restaurantId = (oneJson["restaurantId"] as? NSNumber)?.longLongValue
Run Code Online (Sandbox Code Playgroud)

并且一次又一次地提醒自己,当它是你正在投射的AnyObject时,Swift正在向你隐瞒它从NSNumber转换为Swift基类型的事实,事实上,它们仍然只是NSNumbers.


Fel*_*SFD 0

我建议不要使用Int64(或Int32)。Int在大多数情况下都会起作用。

请参阅这篇关于 Swift 中不同整数的文章:/sf/answers/1920811091/