【问题标题】:When i remove DispatchQueue.main.async I get no error当我删除 DispatchQueue.main.async 我没有收到错误
【发布时间】:2021-07-08 18:27:23
【问题描述】:

所以我们有这个代码 它发出从 API 获取数据的请求,我了解到更新 UI 应该只在主线程上但是如果我删除 DispatchQueue.main.async {} 没有任何反应,没有错误或没有警告 所以我想知道我应该保留它还是不保留它

func loadUsers() {
        server.getUserInfo()
        server.completionHandler {[weak self] (users,status,message) in
            if status {
                guard self != nil else {return}
                guard users != nil else {
                    return
                }
                self?.userViewModel.setUsers(users: users!)
                DispatchQueue.main.async {
                    self?.tableView.reloadData()
                }
            }
            
        }
    }
}

【问题讨论】:

  • 如果没有错误(现在,那行是一个紫色的ruban,可能是控制台错误,或者如果设置启用了断点),这意味着ompletionHandler已被调用主线程。注意,有时闭包可以在当前线程中调用,有时不能。
  • @Larme 是的,我打印出了当前线程,它说的是 main,但它并不总是这样吗?
  • 不保证。将触发它的调用可以在任何线程中。这取决于它是如何完成的。 completionHandler 的文档是什么,是你的代码吗?如果是这样,它是哪一个?它的文档保证有一个特殊的线程?
  • @Larme 我正在使用 alamofire 请求

标签: swift request queue completionhandler


【解决方案1】:

所以我在我的项目中使用了 alamofire 请求

AF.request(TodoRouter.getData(parameters: parameters)).responseJSON

响应 JSON 方法需要一个队列,如果你不指定它,默认是 main

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 2018-07-09
    • 2019-08-12
    • 2016-11-17
    • 1970-01-01
    相关资源
    最近更新 更多