从 Alamofire
请求获取 JSON
数据后,我想在后台线程解析它,因为解析过程很困难并且在我的情况下有一些逻辑。要解决的第一个想法是通过 Alamofire
同步请求在后台线程上执行 async
操作。但是,正如我所读到的,Alamofire
完全异步工作。我的第二个解决方案是在 Alamofire
的 responseJSON
被调用后,在另一个线程中执行解析 JSON
过程。完成后,我将在主线程中更新我的 UI。这是它的样子:
.responseJSON { (response) in //callback of Alamofire
if response.result.isSuccess {
let json = JSON(response.result.value!)
DispatchQueue(label: "parsing", qos: .userInitiated).async {
self.parseJSON(json)
DispatchQueue.main.async {
self.updateUI()
}
}
}
}
但这是解决这个问题的好方法吗?我只是不想在主线程上解析 JSON
,因为解析过程有几个 for
循环和其他操作,而且,我认为这会导致绘制UI相关的东西。
最佳答案
Alamofire 的response
方法采用queue
参数,因此您可以控制闭包运行的位置:
responseJSON(queue: myQueue) { (response)
...
}
只要确保你回调到主队列即可。
此外,如果您想使用 JSONDecoder
,请更新到 Alamofire 5(目前处于测试阶段)或使用 responseData
并将该数据提供给 JSONDecoder
.
关于ios - Alamofire 请求完成后如何在后台线程中解析 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54646712/