2015-10-17 196 views
0

我想將對象追加到對象數組。將對象追加到變量

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對象,但是當我嘗試添加到產品的變量,它不追加。

這裏是輸出:

[Checkfood.Product] 
Checkfood.Product 
Checkfood.Product 
Checkfood.Product 
Checkfood.Product 
Checkfood.Product 

第一線代表print(self.products),剩下的就是print(product)

謝謝

+0

您正在快速打印'self.products'。該行在異步請求完成之前很長時間執行。 – rmaddy

+0

@rmaddy我有另一個函數,它只返回這個數組中的項的總數,當我不追加自己時它總是返回0。 –

回答

2

「網絡在Alamofire是異步完成的」 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)) 
} 
+0

'self.products.append(product)'顯示錯誤:'使用未解析的標識符產品'。我需要在Alamofire調用之前創建'product'變量嗎? –

+0

噢,是的,否則它只在循環中聲明。我會編輯我的答案 – Lukas

+0

你不能使用附加它btw,其數組本身,所以你可以添加'+'。我也編輯過, – Lukas