【发布时间】:2017-07-21 16:10:01
【问题描述】:
我正在尝试使用SwiftyJSON 将JSON 数据解析为一个数组以在我的TableView 中使用。但是,即使我可以成功请求数据并将其解析为数组,我也无法从 getObjects 函数返回它,因为它是异步完成的。我曾尝试使用完成处理程序,在学习了几个教程之后,我似乎遗漏了一些东西。
有人知道我如何返回数组以在我的 TableViewController 中使用吗?
表格视图控制器
let objects = [Objects]()
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let urlString = "URLSTRING"
objects = dataManager.getObjects(urlString)
print("objects in view controller products array \(objects.count)")
self.tableView.reloadData
}
请求函数
class DataManager {
func requestObjects(_ stringUrl: String, success:@escaping (JSON) -> Void, failure:@escaping (Error) -> Void) {
print("Request Data")
Alamofire.request(stringUrl, method: .get).validate().responseJSON { response in
switch response.result {
case .success(let value):
let json = JSON(value)
print("responce success")
success(json)
case .failure(let error):
print(error)
} //End of switch statement
} //End of alamofire request
} //End of request function
func getObjects(_ urlString:String) -> [Object] {
var objects = [Object]()
requestObjects(urlString, success: { (JSONResponse) -> Void in
let json = JSONResponse
for item in json["items"] {
let title = item.1["title"].string
objects.append(Object(title: title!))
}
print("Number of objects = \(objects.count)")
}) {
(error) -> Void in
print(error)
}
print(objects) // Prints empty array
return objects // Array is empty
}
}
【问题讨论】:
标签: json swift alamofire swifty-json