Swift 解析 JSON 和 return 字典数组的函数
Swift Function to parse JSON and return a array of dictionaries
我试图编写一个函数来解析 JSON。函数的 return 值是字典的 array
。不幸的是,我遇到了分配 result = data as! [[String:AnyObject]]
不起作用的问题。 print(data)
return 是我的 JSON 很棒的返回,但是 print(result)
只返回一个空数组。令人惊讶的是方法 print(result)
运行s 先是方法 print(data)
运行.
我试过的代码:
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
}
Api 以 async
(在后台)方式调用工作,这就是为什么您需要使用 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)
}
我试图编写一个函数来解析 JSON。函数的 return 值是字典的 array
。不幸的是,我遇到了分配 result = data as! [[String:AnyObject]]
不起作用的问题。 print(data)
return 是我的 JSON 很棒的返回,但是 print(result)
只返回一个空数组。令人惊讶的是方法 print(result)
运行s 先是方法 print(data)
运行.
我试过的代码:
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
}
Api 以 async
(在后台)方式调用工作,这就是为什么您需要使用 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)
}