相关疑难解决方法(0)

我可以在 Swift 中使用 actor 始终在主线程上调用函数吗?

我最近看到 Swift 在Swift 5.5 中引入了对 Actor 模型的并发支持。当我们有一个共享的、可变的状态时,这个模型支持安全的并发代码以避免数据竞争。

我想避免应用程序 UI 中的主线程数据竞争。为此,我将DispatchQueue.main.async在调用站点中设置UIImageView.image属性或UIButton样式的任何地方进行包装。

// Original function
func setImage(thumbnailName: String) {
    myImageView.image = UIImage(named: thumbnailName)
}

// Call site
DispatchQueue.main.async {
    myVC.setImage(thumbnailName: "thumbnail")
}
Run Code Online (Sandbox Code Playgroud)

这似乎不安全,因为我必须记住在主队列上手动调度该方法。另一种解决方案如下所示:

func setImage(thumbnailName: UIImage) {
   DispatchQueue.main.async {
      myImageView.image = UIImage(named: thumbnailName)
   }
}
Run Code Online (Sandbox Code Playgroud)

但这看起来像很多样板文件,我不会说我喜欢将它用于具有不止一层嵌套的复杂功能。

Swift 对 Actors 的支持看起来像是一个完美的解决方案。那么,有没有办法让我的代码更安全,即始终使用 Actors 在主线程上调用 UI 函数?

multithreading ios swift swift5.5

2
推荐指数
1
解决办法
569
查看次数

标签 统计

ios ×1

multithreading ×1

swift ×1

swift5.5 ×1