首页 > 解决方案 > 我可以从 API 获取日期,但是当我填充单元格时,我的计数为零

问题描述

我的服务具有以异步方式完成返回结果的方法,我可以在关闭中看到结果,但是当我从关闭中退出时,我的结果为 nil

我为此使用 Swift 5,并使用 URLSession

var categoryViewModel = CategoryViewModel()

    override func viewDidLoad() {
        super.viewDidLoad()
        navigationItem.title = "Digital Space"
        setupTableView()
        bindViewModel()
    }

    fileprivate func bindViewModel() {
        categoryViewModel.fetchCategories { (categories) in
            self.categoryViewModel.categories = categories
        }
    }
var categories: [Category]?

    mutating func fetchCategories(completion: @escaping ([Category]) -> ()) {
        var this = self
        Repository.getAllCategories { (result) in
            switch result {
            case .failure(let error):
                print(error)
            case .success(let categories):
                this.categories = categories
                completion(categories)
            }
        }

在绑定视图模型中,我将断点放在 self.categoryViewModel 中,我可以从 API 获取日期,但是当我退出此方法时,例如 cellForRow,我的视图模型中的类别为零。

标签: iosswiftrestserviceurlsession

解决方案


为了解决这个问题,你可以看到这个调用都是异步的,这个问题来自 GCD

所以要解决就像那样

迅速

fileprivate func bindViewModel() {
        categoryViewModel.fetchCategories { (categories) in
            self.categoryViewModel.categories = categories
            DispatchQueue.Main.Async {
               self.tableView.reloadData()
           }
        }
    }

推荐阅读