将对象追加到变量

时间:2015-10-17 22:21:23

标签: ios swift alamofire

我试图将一个对象附加到一个对象数组。

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)

谢谢

1 个答案:

答案 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))
}