Json Swift-迭代一组字典,同时从每个字典中检索一个值
我使用的是一个返回字典数组的web API。例如,它返回一个包含9个字典的数组,每个字典中都有一个名为“title”的键 我尝试了以下代码,它崩溃了,出现了一个打开可选值的错误:Json Swift-迭代一组字典,同时从每个字典中检索一个值,json,swift,Json,Swift,我使用的是一个返回字典数组的web API。例如,它返回一个包含9个字典的数组,每个字典中都有一个名为“title”的键 我尝试了以下代码,它崩溃了,出现了一个打开可选值的错误: for dict in returnedJson { if let validTitle = dict["title"] as? String { print(validTitle) dataList.append(validTi
for dict in returnedJson {
if let validTitle = dict["title"] as? String {
print(validTitle)
dataList.append(validTitle)
} else {
print("Optional title?")
}
}
由于print(validTitle)行的原因,标题列表会在控制台中打印,但是我用来填充tableview的数组似乎不想附加它
我知道这可能是我一直在逃避的一件很基本的事情
提前谢谢 您很可能已将
dataList
定义为隐式展开的可选项。这就是为什么在调用append时不需要使用可选链接的原因,但是如果数据列表
为零,它仍然会抛出一个错误,因为它正试图打开它。我遇到了同样的问题:
1) 确保dataList是NSMutableArray
2) 在追加之前创建字符串类型的变量
例如:
var recs:NSArray = jsonObj.objectForKey("pets")?.objectForKey("records") as! NSArray
for item in recs{
var arr:NSArray = item as! NSArray
var name:String = arr[1] as! String
println(arr[2] as! String)
self.recsAddr.addObject(name)
}
我同意其他人的看法,对于错误日志,我怀疑您正在使用一个隐式展开的可选项,该可选项恰好为零。我们需要更多的代码 一般来说,这类问题非常适合函数式编程范式(Swift非常喜欢),可以按如下方式解决
let returnedJson : [NSDictionary] = [["title":"one"], ["no title here":""], [:], ["title":"four"], ["title":"five"], ["title":"six"]]
let titles = returnedJson
.map { return $0["title"] } // now we have a list of titles/nil [String?]
.filter { return $0 != nil} // now we have a list of titles (without nil)
.map { return $0! } // now we have this return type [String]
titles // -> ["one", "four", "five", "six"]
希望这有帮助。是否初始化数据列表?崩溃在哪里?什么是展开的可选?我们需要看到更多的代码。具体来说,我们需要了解如何定义
dataList
。另外,在您的代码示例中没有强制展开,因此展开可选错误到底发生在哪里?OP的JSON反序列化为字典,而不是数组。此外,OP似乎使用的是Swift数组和字典,而不是对应的Cocoa。最后,所有的as代码>强制降级只会导致运行时错误,尤其是在处理来自远程服务器的JSON对象时,您无法保证接收到的数据的结构。谢谢大家。是的,在初始化数据列表时犯了一个愚蠢的错误(我还在学习)。我感谢大家的反馈,并将研究函数式编程范例appzyourlyfe