swiftUI 中 @MainActor 是干什么的
@MainActor
是 Swift 和 SwiftUI 中的一个属性包装器,它用于指定某个类、结构体、方法或属性应该在主线程上执行。主线程通常是进行用户界面更新的线程,所以在 SwiftUI 开发中,使用 @MainActor
可以确保与 UI 相关的代码在正确的线程上运行。
具体来说,@MainActor
可以用于以下场景:
类或结构体:如果你在一个类或结构体上使用 @MainActor
,那么该类型的所有实例方法和属性都会默认在主线程上执行。
@MainActor
class MyViewModel {
var data: String = ""
func updateData() {
// 这个方法会在主线程上执行
}
}
方法:你可以在方法上单独使用 @MainActor
,以确保该方法在主线程上执行。
class MyViewModel {
var data: String = ""
@MainActor
func updateData() {
// 这个方法会在主线程上执行
}
}
属性:类似地,你也可以在属性上使用 @MainActor
。
class MyViewModel {
@MainActor var data: String = ""
}
使用 @MainActor
可以帮助开发者避免与 UI 更新相关的常见线程错误,因为如果尝试在后台线程更新 UI,可能会导致应用程序崩溃或者显示异常。尤其是在使用异步代码时,确保 UI 更新在主线程上是很重要的。
需要注意的是,从 Swift 5.5 开始,Swift 引入了并发特性,因此 @MainActor
在异步/并发编程中显得尤为重要。