我正在尝试从API循环一些解析的JSON并构建一个可以在整个应用程序中访问的全局字典。我在尝试设置字典项时遇到错误。
全局变量设置为
var propListArray = [Int : [String : String]] ()
//LOOP THROUGH PROPERTIES
let itemArray = dataDictionary["properties"] as! NSArray //HAVE DATA HERE JUST FINE
var i = 0
for item in itemArray {
let propertyID = item["id"]! as! String
print(propertyID) //THIS PRINTS FINE IN CONSOLE
propListArray[i]!["propertyID"] = propertyID //THIS THROWS AN ERROR ON EXECUTION
i++
}
我想最终得到像这样的数组
propertyListArray[0]["propertyID"] = "16001"
propertyListArray[1]["propertyID"] = "16001"
propertyListArray[2]["propertyID"] = "16001"
propertyListArray[3]["propertyID"] = "16001"
每个项目还会有其他变量,例如标题等。但只是尝试至少获得每个项目的一个变量。
任何帮助都会很棒!!谢谢。
答案 0 :(得分:2)
propListArray
为空,因此尝试在任何索引处获取字典将返回nil,然后当您尝试设置值时,将导致错误。
您可以通过创建字典然后以正确的索引将其分配给全局字典来修复它。
var propListArray = [Int : [String : String]] ()
let itemArray = dataDictionary["properties"] as! NSArray
for (index, item) in itemArray.enumerate() { {
let propertyID = item["id"]! as! String
let data = ["propertyID": propertyID]
propListArray[index] = data
}
答案 1 :(得分:0)
快速修复:
var propListArray = [Int : [String : String]] ()
let itemArray = dataDictionary["properties"] as! NSArray
var i = 0
for item in itemArray {
let propertyID = item["id"]! as! String
propListArray[i] = ["propertyID": propertyID]
i++
}
但是,i++
循环中的for
不是惯用的Swift。实际上,在Swift 3中将删除i++
和C风格的for
循环。最好使用enumerate()
:
var propListArray = [Int : [String : String]] ()
let itemArray = dataDictionary["properties"] as! NSArray
for (i, item) in itemArray.enumerate() {
let propertyID = item["id"]! as! String
propListArray[i] = ["propertyID": propertyID]
}
propListArray[0]?["propertyID"]