我有Service方法,该方法以异步方式完成返回结果,我可以在闭包中看到结果,但是当我退出闭包时,结果为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)退出时,视图模型中的类别为nil。
答案 0 :(得分:0)
要解决此问题,您可以看到此调用全部是异步的,此问题来自GCD
所以解决就是这样
迅速
fileprivate func bindViewModel() {
categoryViewModel.fetchCategories { (categories) in
self.categoryViewModel.categories = categories
DispatchQueue.Main.Async {
self.tableView.reloadData()
}
}
}