我有一个API返回的是这样的:无法转换JSON结果为结构
{
elements:[{
name = "user1",
details = {
phone = "0033612345678"
}
},
{
name = "user2",
details = {
phone = "0033612346612"
}
},
{
name = "test3"
}]
}
细节关键是不存在于每个元素
我已经定义了一个ElementModel.swift文件,我想为elements数组的每个元素创建一个ElementModel实例。
import Foundation
struct ElementModel {
var name:String
var phone:String
}
为了获取名称和电话值,我创建了下面的函数,当正确执行的请求调用(使用delagation)
func getRequestSucceed(results: NSDictionary) {
println("getRequestSucceed")
// Loop through list of elements
let elementsArray = results["elements"] as NSArray
var elementsTmpArray:[ElementModel] = []
// Convert each result into Element object
for var i=0;i<elementsArray.count;i++
{
// Get NSDictionary from each element
let element = elementArray[i] as NSDictionary
// Create Element object with parameters from dictionary
var name = element["name"] as String
var phone:String = ""
// If details key exists, get phone attribute
if let details = element["details"] as? NSDictionary {
println(details["phone"]) // Phone number is correctly displayed
phone = details["phone"] as String // Simulator crash occurs the first time
} else {
println("Not defined")
}
// Create element model with name and phone
var t = ElementModel(name: name, phone: phone)
elementsTmpArray.append(t)
}
// Update table view
dispatch_async(dispatch_get_main_queue(), {
self.elements = elementsTmpArray
self.elementsTableView!.reloadData()
})
}
这种方法行不通,似乎像细节[“电话”]不能以这种方式检索。我对swift非常陌生,并且不太了解Optional。只是想知道是否可选参与这个问题。
有什么想法?
请在投票问题时添加注释,以便它可以帮助理解问题为什么不好或其他问题。 – Luc 2014-11-03 12:55:43
我总是讨厌Downvote Drive-Bys ... 我也遇到类似的问题。为了解决这个问题,我必须对第一个对象进行硬编码,第一个对象包含一些数据,比如你称之为“元素”,但错误的是,如果你改变了这个哟[0],我确信它可能会起作用。至少它为我做了。我认为是Swift的一个bug。 – 2014-11-04 19:24:40
顺便问一下,你忘了问,你甚至在调试时输入你的For循环?是NSArray显示为nil的数组let letArray = results [“elements”]? – 2014-11-04 19:28:58