ios - Alamofire 请求完成后如何在后台线程中解析 JSON?

标签 ios json swift multithreading alamofire

Alamofire 请求获取 JSON 数据后,我想在后台线程解析它,因为解析过程很困难并且在我的情况下有一些逻辑。要解决的第一个想法是通过 Alamofire 同步请求在后台线程上执行 async 操作。但是,正如我所读到的,Alamofire 完全异步工作。我的第二个解决方案是在 AlamofireresponseJSON 被调用后,在另一个线程中执行解析 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/

相关文章:

ios - 用于发送电子邮件的网络服务

arrays - 需要在 CloudKit 查询后立即触发完成 block

php - 如何将 json block 转换为 CSV 文件?

swift - EXC_BAD_INSTRUCTION 绑定(bind)到 TableView 单元格时

ios - 如何使用 Swift 使 UILabel 的边缘变圆

ios - 是否有任何公开文件表明 Facebook 测试用户不能使用 iOS 6 集成?

ios - 为登录用户触发 Segue

ios - 找不到 NSManagedObject.h 文件错误

mysql - 将学说数组转换为 JSON

json - 如何使用 serde_json 序列化包含 f32 的结构?