我试图将一个对象附加到一个对象数组。
var products: [Product] = []
init() {
Alamofire.request(.GET, Urls.menu).responseJSON { request in
if let json = request.result.value {
let data = JSON(json)
for (_, subJson): (String, JSON) in data {
let product = Product(id: subJson["id"].int!, name: subJson["name"].string!, description: subJson["description"].string!, price: subJson["price"].doubleValue)
print(product)
self.products.append(product)
}
}
}
self.products.append(Product(id: 1, name: "test", description: "description", price: 1.0))
print(self.products)
}
我正在通过我的JSON响应循环并创建Product对象,但是当我尝试追加到product变量时,它并没有附加。
这是输出:
[Checkfood.Product]
Checkfood.Product
Checkfood.Product
Checkfood.Product
Checkfood.Product
Checkfood.Product
第一行代表print(self.products)
,其余为print(product)
谢谢
答案 0 :(得分:2)
" Alamofire中的网络是异步完成的#34;说API描述意味着不是等待来自服务器的响应,而是在收到响应时调用处理程序,但同时代码执行继续,无论如何。当调用处理程序时,只能在该处理程序中访问响应: - "请求的结果仅在响应处理程序的范围内可用。根据响应或从服务器接收的数据的任何执行必须在处理程序内完成。
如果希望处理程序具有该优先级,则可以使用高优先级线程。以下是如何做到这一点:
Alamofire.request(.GET, Urls.menu).responseJSON { request in
if let json = request.result.value {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {
let data = JSON(son)
var product: [Products] = []
for (_, subJson): (String, JSON) in data {
product += [Product(id: subJson["id"].int!, name: subJson["name"].string!, description: subJson["description"].string!, price: subJson["price"].doubleValue)]
print(product)
}
dispatch_async(dispatch_get_main_queue()) {
self.products += product //since product is an array itself (not array element)
//self.products.append(product)
}
}
}
self.products.append(Product(id: 1, name: "test", description: "description", price: 1.0))
}