回到 WWDC 2021\xe2\x80\x99s Discover concurrency in SwiftUI,他们建议您将ObservableObject对象与主要参与者隔离。例如:
struct ContentView: View {\n @StateObject var viewModel = ViewModel()\n\n var body: some View {\n Text("\\(viewModel.count)")\n .task {\n try? await viewModel.start()\n }\n }\n}\n\n@MainActor \nclass ViewModel: ObservableObject {\n var count = 0\n\n func start() async throws {\n while count < 10 {\n count += 1\n try await Task.sleep(for: .seconds(1))\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n但在 iOS 17\xe2\x80\x99s观察框架(如 WWDC 2023\xe2\x80\x99s Discover Observation in SwiftUI中介绍)中,似乎不再需要隔离到主要参与者来防止在后台线程。例如,以下内容不会出现有关从后台启动 UI 更新的警告:
\nstruct ContentView: View {\n …Run Code Online (Sandbox Code Playgroud)