尝试使用alamofire解析一个示例JSON对象,而来自http的SwiftlyJSON无法将其解析为我的产品模型。这真的很奇怪,我在for循环中运行调试器,迭代并执行“po self.productlist”,该值确实附加到数组中。但是当我尝试在循环外打印它时,它就不起作用,当我尝试在调试器模式下执行“po self.productlist [0] [”product“]”时也是如此。有一点它工作真的很奇怪。正如你所看到的,我在imgur链接中附上了2张图片。
我还附上了我的控制器和模型,我不确定我做了什么错误,或者可能有错误。任何帮助,将不胜感激。感谢
控制器
import UIKit
import Alamofire
import SwiftyJSON
class AddProductController: UITableViewController {
var productlist = [Product]()
override func viewDidLoad() {
super.viewDidLoad()
Alamofire.request("https://api.myjson.com/bins/1f1zop").responseJSON { response in
let jsondata = JSON(data: response.data!)
for index in 0..<jsondata["data"].count{
self.productlist.append(Product(id: jsondata["data"][index]["id"].stringValue, product: jsondata["data"][index]["product"].stringValue, category: jsondata["data"][index]["category"].stringValue, price: jsondata["data"][index]["price"].doubleValue))
}
}
print(self.productlist[0]["id"])
模型
import Foundation
class Product {
var id:String
var product:String
var category: String
var price: Double
init(id:String, product:String, category:String, price:Double) {
self.id = id
self.product = product
self.category = category
self.price = price
}
}
] 2
更新为vadian 谢谢,我明白了!
答案 0 :(得分:0)
没有错误,那是着名的 async-trap 。
Alamofire请求异步工作,JSON在<{strong> print
行之后返回。
只需将print
行 - 以及处理数组的代码 - 放入完成块。
发生错误,因为您尝试像字典一样获取id
。使用属性.id
顺便说一下:请不要在Swift中使用基于索引的循环
Alamofire.request("https://api.myjson.com/bins/1f1zop").responseJSON { response in
let jsondata = JSON(data: response.data!)
for product in jsondata["data"].array! {
self.productlist.append(Product(id: product["id"].stringValue, product: product["product"].stringValue, category: product["category"].stringValue, price: product["price"].doubleValue))
}
print(self.productlist[0].id) // use the property, it's not a dictionary.
}
注意:如果从第三方服务加载JSON,您应该使用可选绑定来安全地解析数据。