我正在使用返回字典数组的Web API。例如,它返回一个包含9个字典的数组,每个字典中都有一个名为“title”的键。
我已经尝试了以下代码,并且因为解开可选值时出错而崩溃:
for dict in returnedJson {
if let validTitle = dict["title"] as? String {
print(validTitle)
dataList.append(validTitle)
} else {
print("Optional title?")
}
}
由于print(validTitle)行,标题列表会在控制台中打印出来,但我用来填充tableview的数组似乎不想附加它。
我知道这可能是一些非常基本的东西。
提前致谢!
答案 0 :(得分:0)
您很可能将dataList
定义为隐式解包的可选项。这就是为什么你在调用append时不需要使用可选链接但是如果dataList
为nil,它仍然会抛出错误,因为它试图解包它。
答案 1 :(得分:0)
我有同样的问题: 1)确保dataList是NSMutableArray 2)在追加之前创建一个var类型的字符串 例如:
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)
}
答案 2 :(得分:0)
我同意其他人的意见,我怀疑你使用的是一个隐式解包的可选,这个错误日志恰好是nil。我们需要更多代码。
一般来说,这种问题非常适合功能编程范例(因此受到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"]
希望这有帮助。