2016-07-31 159 views
0

我試圖編寫一個函數來解析JSON。函數的返回值是字典的一個array。不幸的是,我有問題,分配result = data as! [[String:AnyObject]]不起作用。 print(data)返回我的JSON精彩回來,但print(result)只給了我一個空陣列回來。令人驚訝的是,方法print(result) 先運行,然後運行方法print(data)Swift函數解析JSON並返回一個字典數組

代碼中,我有嘗試:在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

阿比調用工作(背景)的方式,這就是爲什麼你需要使用SWIFT的closure而不是返回dictionary。更改代碼這樣

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

編碼愉快:) –