2016-04-18 38 views
1

我陷入了一個奇怪的問題。 我正在通過Alamofire解析JSON響應,並且想要獲取一個只持續拋出錯誤的變量,無論我是否將其轉換爲字符串或數字,並且每次都改變錯誤消息:/ 如果我將其轉換爲像這樣的字符串:無法從JSON字典中正確轉換值

let kolicina = jsonCategory["kolicina"] as! String 

if Int(kolicina) > 0 { 

我得到的錯誤:

"Could not cast value of type '__NSCFNumber' (0x10f051368) to 'NSString' (0x10e627b48)."

當我嘗試將其轉換爲一個的NSNumber:

let kolicina = jsonCategory["kolicina"] as! NSNumber 

if kolicina.integerValue > 0 { 

我得到:

"Could not cast value of type 'NSTaggedPointerString' (0x10effcae8) to 'NSNumber' (0x10e5d32a0)."

這是我得到的是特定變量當我打印的字典:

kolicina = 0; 

有人能指出我在正確的方向?

+1

據推測這是在某種循環中,JSON包含數字和字符串的混合? – Wain

回答

2

看來你有一個字符串和整數的組合在那裏。我建議您修復JSON並將數據保存爲字符串或數字,而不是兩者。

如果要分析這樣的格式,你將不得不嘗試解析它作爲一個NSNumber或作爲NSString,如:

let kolicina = jsonCategory["kolicina"] 

if let kolicinaString = kolicina as? String { 
... 
} else if let kolicinaInt = kolicina as? Int { 
... 
} 

> 0檢查,你可以做這樣的事情:

if let kolicinaString = kolicina as? String, 
     kolicinaInt = Int(kolicinaString) where kolicinaInt > 0 { 

    print("String: \(kolicinaInt)") 
} else if let kolicinaInt = kolicina as? Int where kolicinaInt > 0 { 

    print("Int: \(kolicinaInt)") 
} 

,或者使用三元運算符:

let kolicinaInt = (kolicina is String) ? Int(kolicina as! String) : kolicina as? Int 

if kolicinaInt > 0 { 
    print("Kolicina: \(kolicinaInt)") 
} 
+0

事實上,它是在一個循環中,但似乎Java只是在調用它們的JSON方法時忽略了這種東西,所以Android版本從未向我們展示過API有多糟糕。非常感謝! –

+0

@LeoStarićJava不會忽略那些東西,但任何Java Object都可以使用Object.toString轉換爲String,包括數字。這意味着如果你要求一個'String',那麼在某些情況下該對象會被轉換爲'String'。 – Sulthan

2

試試這個..不打力展開

if let kolicina = jsonCategory["kolicina"] as? Int{ 
     // Success: your kolicina is Int 
     print(kolicina) 
    } 
    else{ 
     // Not an Int 
    }