2017-08-31 40 views
0

我有一個json被轉向字典對象。當甩你可以看到返回處理「無法將類型'NSTaggedPointerString'的值轉換爲'NSNumber'」

▿ (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] 

謝謝

+0

錯誤清楚地說,該值是一個'string'而非'(NS)number'設置的默認值爲0。並且請用起始小寫字母命名變量。 – vadian

+0

看來,並非所有的JSON條目都有'LivingArea'的數值。您應該將變量保留爲可選項,並在需要時將其解包。不要強行拆包,否則會發生崩潰。另一種選擇是使用'let livingArea = userDict?[「LivingArea」]將默認值設置爲0? Int ?? 0' – Paulw11

+0

@AshokKumarReddyPolu我得到以下內容:無法用類型爲'(Any?)'的參數列表類型'Int'調用初始化程序。 –

回答

1

這似乎並不是所有的在你的JSON條目有LivingArea數值。

一個選項是將變量保留爲可選項,並在需要時將其解包。不要強制展開,否則當數值缺失或沒有整數時會發生崩潰。

您應該防守編碼,特別是在處理來自外部數據源的數據時。

另一種選擇是使用

let livingArea = userDict?["LivingArea"] as? Int ?? 0 
相關問題