有些东西我无法理解......我有这个功能:
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)关闭。
知道它可能来自哪里?
提前致谢
答案 0 :(得分:1)
因为强制转换为带有!
的NSString,当与该键对应的值不是NSString时,以及当值为nil
时,它将崩溃。
您可能应该首先进行安全检查。更重要的是:你有没有特别的理由重新发明如何访问字典?
这是从密钥获取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"
}