2016-07-31 3 views
0

JSONを解析する関数を作成しようとしました。関数の戻り値は辞書のarrayです。残念ながら、私は割り当てresult = data as! [[String:AnyObject]]が機能しないという問題があります。 print(data)は私のJSONを素晴らしいものに戻しますが、print(result)は私に空の配列を返すだけです。驚くべきことに、方法print(result) が最初に実行され、次に方法print(data)が実行されることです。JSONを解析して辞書の配列を返すSwift関数

コード私は試してみる:(バックグラウンドで)asyncで仕事を呼び出す

import Foundation 
import Alamofire 
import SwiftyJSON 

func getPlayers() -> Array<Dictionary<String, AnyObject>> { 

    var result = [[String:AnyObject]]() 

    Alamofire.request(.GET, "http://example.com/api/v1/players", parameters: ["published": "false"]) 
     .responseJSON { (responseData) -> Void in 
      if((responseData.result.value) != nil) { 
       let response = JSON(responseData.result.value!) 

       if let data = response["data"].arrayObject { 
        print(data) 
        result = data as! [[String:AnyObject]] 
       } 
      } 
    } 

    print(result) 

    return result 
} 

答えて

3

アピあなたがdictionaryを返すのではなく、迅速closureを使用する必要がある理由です方法。あなたのコードは、この

func getPlayers(completion: (Array<Dictionary<String, AnyObject>>) ->())) { 

    var result = [[String:AnyObject]]() 

    Alamofire.request(.GET, "http://example.com/api/v1/players", parameters: ["published": "false"]) 
     .responseJSON { (responseData) -> Void in 
      if((responseData.result.value) != nil) { 
       let response = JSON(responseData.result.value!) 
       if let data = response["data"].arrayObject { 
        print(data) 
        result = data as! [[String:AnyObject]] 
       } 
      } 
      completion(result) 
    } 
} 

のように変更し、この

self.getPlayers() { (result) ->() in 
    print(result) 
} 
+1

ハッピーコーディングのように呼び出します:) –

関連する問題