无法正确转换JSON字典

时间:2016-04-18 13:00:54

标签: ios swift

我遇到了一个奇怪的问题。 我正在通过Alamofire解析一个JSON响应,并且想要获取一个只是不断抛出错误的变量,无论我是否将它转换为String或Number,每次我都会改变错误消息:/ 如果我将它转换为这样的字符串:

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

if Int(kolicina) > 0 {

我收到错误:

  

“无法将'__ NSCFNumber'类型的值(0x10f051368)转换为'NSString'(0x10e627b48)。”

当我尝试将其转换为NSNumber时:

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

if kolicina.integerValue > 0 {

我明白了:

  

“无法将'NSTaggedPointerString'类型的值(0x10effcae8)转换为'NSNumber'(0x10e5d32a0)。”

这是我在打印词典时获得的特定变量:

 kolicina = 0;

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:2)

试试这个..不要强行打开

rails server -b 0.0.0.0 -p 3000 -e production

答案 1 :(得分:2)

似乎你有一个字符串和整数的组合。我建议你修复JSON并将数据保存为字符串或数字,而不是两者。

如果您要解析这种格式,则必须尝试将其解析为NSNumberNSString,例如:

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)")
}