2016-03-22 15 views
0

皆さん、こんにちは、私はこの成功ハンドラから値を取得しようとしていましたが、何も動作していないようです。閉鎖の中で私は望む配列を印刷することができます。OAuthSwift closureキャプチャ値が機能しない

最後に、すべての製品名を追加して配列の最終を返そうとしています。それは返す必要がありますどのような

: [「コーラダイエットプラス」、「ゼロSixer」、「スプレンダで甘くコーラダイエット」、「コーラダイエット」、「コーラダイエット」、「コーラダイエットチェリー」、「コーラダイエットでコーラダイエット、レモン、コーラダイエット、レモン、コーラダイエット、コーラダイエット、コーラダイエット、コーラダイエット、コーラダイエット、コーラダイエット、コーラダイエット、コーラダイエット、それは返す何コーラ」、 『コーラダイエットカフェインフリー』、 『ライムコーラダイエット』、 『泉シロップダイエット』、 『コーラダイエット』、 『レモンコーラダイエット』]

: []

どんな提案も素晴らしいだろう!

+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) }) } 

次に、あなたは次のように呼び出すことができます。したがって 'return temp 'は' closure'のコードが実行される前に実行されます。ですから、以下の 'anhtu'の答えを見て、それを使ってください。私はなぜそれをしなければならないのか説明します。 – t4nhpt

答えて

0

あなたはそのように返すことはできません。クロージャを使用する必要があります。別のスレッドでクロージャの実行:あなたがいることを理解しなければならない

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