我有一個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