2016-03-22 23 views
0
func queryProducts() -> Array<String> { 
var final = [String]() 
var temp = [String]() 
self.oauthswift.client.get("http://api.v3.factual.com/t/products-cpg?q=coke", 
    success: { 
     (data, response) in 
     let dataString = NSString(data: data, encoding: NSUTF8StringEncoding) 
     let json = JSON(data: data) 


     if json["status"].stringValue == "ok" { 
      // we're OK to parse! 
      for result in json["response"]["data"].arrayValue { 
       final.append(result["product_name"].stringValue) 

      } 

     } 
      temp = final 

    } 

    , failure: { error in 
     print(error) 
    }) 


return temp 

} 

嘿大家,新的迅速,我一直在試圖從這個成功處理程序捕獲值,但它似乎沒有什麼工作。在閉包內部,我可以打印我想要的數組。OAuthSwift結束捕獲值不工作

最後,我試圖返回數組最後的所有產品名稱追加。

應該回報: [「可樂飲食Plus」,「Zero-Sixer」,「可樂飲食甜加Splenda」,「可樂飲食」,「可樂飲食」,「可樂飲食櫻桃」,「檸檬「,」可樂飲食雙包裝「,」可樂香草「,」可樂飲食香草「,」可樂飲食「,」可樂飲食與檸檬「,」可樂飲食咖啡因免費「,」可樂飲食與檸檬「可口可樂」,‘可口可樂飲食不含咖啡因’,‘可口可樂飲食以石灰’,‘噴泉糖漿飲食’,‘可樂瘦身男女’,‘可口可樂飲食檸檬’]

什麼返回: []

任何建議都會很棒!

+0

你必須認識到:在另一個線程的封閉運行。所以'return temp'這一行將在'closure'中的代碼運行之前運行。所以,請看下面的'anhtu'的答案,並以這種方式使用。我只是解釋爲什麼我們必須這樣做。 – t4nhpt

回答

0

你不能這樣回來。你必須使用閉包。

func queryProducts(successCallback: ([String])->Void) { 
     var final = [String]() 
     var temp = [String]() 
     self.oauthswift.client.get("http://api.v3.factual.com/t/products-cpg?q=coke", 
      success: { 
       (data, response) in 
       let dataString = NSString(data: data, encoding: NSUTF8StringEncoding) 
       let json = JSON(data: data) 


       if json["status"].stringValue == "ok" { 
        // we're OK to parse! 
        for result in json["response"]["data"].arrayValue { 
         final.append(result["product_name"].stringValue) 

        } 

       } 
       temp = final 
       successCallback(temp) // callback here 

      } 

      , failure: { error in 
       print(error) 
      }) 

    } 

然後就可以調用,如:

queryProducts() { 
    arrayProducts in 
    // doing something, arrayProduct is temp array 
}