使用 SwiftyJSON 处理 Alamofire 异步请求
Posted
技术标签:
【中文标题】使用 SwiftyJSON 处理 Alamofire 异步请求【英文标题】:Handle Alamofire asynchronous request using SwiftyJSON 【发布时间】: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
【问题讨论】:
【参考方案1】:您需要使用completionHandler将数据返回给TableViewController。
func getObjects(completionHandler : @escaping ([Object]) -> (),_ urlString:String) -> [Sneaker]
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!))
completionHandler(objects)
print("Number of objects = \(objects.count)")
)
(error) -> Void in
print(error)
print(objects) // Prints empty array
return objects // Array is empty
在您的 TableViewController 中
dataManager.getObject(completionHandler: list in
self.objects = list
, urlString)
可能有一些我没有测试的语法错误
【讨论】:
以上是关于使用 SwiftyJSON 处理 Alamofire 异步请求的主要内容,如果未能解决你的问题,请参考以下文章