我们希望在现有的SwiftUI项目中为我们的视图模型使用@MainActor
Annotation,这样我们就可以go 掉DispatchQueue.main.async
和.receive(on: RunLoop.main)
.
@MainActor
class MyViewModel: ObservableObject {
private var counter: Int
init(counter: Int) {
self.counter = counter
}
}
在从SwiftUI视图初始化带注释的类时,这很好用.但是,当使用SwiftUI预览或XCTest时,我们还需要从@MainActor
上下文之外初始化类:
class MyViewModelTests: XCTestCase {
private var myViewModel: MyViewModel!
override func setUp() {
myViewModel = MyViewModel(counter: 0)
}
它显然不能编译:
不能从非隔离上下文中变异主执行元隔离属性‘init(count:int)’
现在,显然我们也可以按照建议的here用@MainActor
来注释MyViewModelTests
.
但我们不希望所有的单元测试都运行在主线程上.那么,在这种情况下,推荐的做法是什么?
如果我们不想在初始化式中设置变量的值,那么同样在上面的对话中建议的用nonisolated
注释init
函数才能起作用.