我从API加载书籍,在加载期间显示活动指示器,在服务器响应后更新标签。
activityView.isHidden = false
let task = detach {
do {
let books = try await self.bookService.fetchBooks()
DispatchQueue.main.async {
self.show(books: books)
}
} catch {
DispatchQueue.main.async {
self.resultLabel.text = error.localizedDescription
}
}
DispatchQueue.main.async {
self.activityView.isHidden = true
}
}
//...
我的问题是,在主队列上更新UI的更好方法是什么?使用
DispatchQueue.main.async
看起来很丑陋,我猜还有更好的方法可以实现同样的功能。我必须使用它,因为所有UI更新都应该在主线程上进行,而没有
DispatchQueue.main.async
会导致编译错误,例如:“文本”属性隔离到全局演员“MainActor”,不能从非隔离上下文进行变异
或者
“isHidden”属性隔离到全局演员“MainActor”,不能从非隔离上下文进行变异
附:使用Xcode 13.0b2
MainActor.run
- idmean