Swift函数解析JSON并返回一个字典数组

Swift函数解析JSON并返回一个字典数组

问题描述:

我试图编写一个函数来解析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 
} 

阿比调用工作(背景)的方式,这就是为什么你需要使用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

编码愉快:) –