[英]Int64 does't work while Int works
我收到一個JSON,我想解析它以獲得一個值。 我這樣做
let ddd = oneJson["restaurantId"] as! Int
print("ddd = \(ddd)")
let restaurantId = oneJson["restaurantId"] as! Int64
如你所見,我正在解析相同的字段。 這是我的JSON
"location":"location here location","restaurantId":0
print語句工作正常,但我在oneJson["restaurantId"] as! Int64
上得到一個例外oneJson["restaurantId"] as! Int64
oneJson["restaurantId"] as! Int64
我很喜歡這個怪癖(不是)。
這是我所知道的語言中最不直觀的問題之一。 所以事實證明,當你得到一個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
並且一次又一次地提醒自己,當它是你正在投射的AnyObject時,Swift正在向你隱瞞它從NSNumber轉換為Swift基類型的事實,事實上,它們仍然只是NSNumbers。
我建議,不要使用Int64
(或Int32
)。 Int
將在大多數情況下工作。
查看有關Swift中不同整數的這篇文章: https : //stackoverflow.com/a/27440158/4687348
是的,它是Swift 3中的已知錯誤,已在Swift 4中解決。
現在,你就是這樣寫的,
let n = NSNumber.init(value: 9223372036854775807) // 2^63 - 1
print(n, n as! Int64) // will print the right answer.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.