尝试从NSDictionary(JSON)打印NSString时出错

时间:2015-04-13 13:18:35

标签: json swift nsstring nsdictionary

有些东西我无法理解......我有这个功能:

func getDataByKey(key: String, jsonDict: NSDictionary) -> NSString {
    for (name, value) in jsonDict {
        if name.isEqual(key) {
            println(value)
            return value as NSString
        }
    }
    return "-1"
}

我在另一个函数中得到结果,当它返回“-1”时我可以显示它,println也很好地显示结果但是当我尝试显示行返回的值“返回值为NSString”我的应用程序用(lldb)关闭。

知道它可能来自哪里?

提前致谢

2 个答案:

答案 0 :(得分:1)

因为强制转换为带有!的NSString,当与该键对应的值不是NSString时,以及当值为nil时,它将崩溃。

enter image description here

您可能应该首先进行安全检查。更重要的是:你有没有特别的理由重新发明如何访问字典?

这是从密钥获取NSString值的常规方法:

let result = myDictionary["key"] as! NSString

如果您不确定字典内容是否为NSString:

if let result = myDictionary["key"] as? NSString {
    println(result)
}

答案 1 :(得分:0)

如果变量可能为零,则必须告诉程序它的预期值为nil。这是用?运营商。的!运算符意味着它将始终具有期望类型的值。你的是一个不是NSString的值。

您可以通过对代码执行以下操作来修改此问题:

func getDataByKey(key: String, jsonDict: NSDictionary) -> NSString {
    for (name, value) in jsonDict {
        if name.isEqual(key) {
            println(value)
            if let unwrappedResult = value as? NSString {
                return unwrappedResult
            }
        }
    }
    return "-1"
}