标签: observation-framework

Actor 隔离 @Observable 类型

回到 WWDC 2021\xe2\x80\x99s Discover concurrency in SwiftUI,他们建议您将ObservableObject对象与主要参与者隔离。例如:

\n
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}\n
Run Code Online (Sandbox Code Playgroud)\n

但在 iOS 17\xe2\x80\x99s观察框架(如 WWDC 2023\xe2\x80\x99s Discover Observation in SwiftUI中介绍)中,似乎不再需要隔离到主要参与者来防止在后台线程。例如,以下内容不会出现有关从后台启动 UI 更新的警告:

\n
struct ContentView: View {\n …
Run Code Online (Sandbox Code Playgroud)

ios swift observableobject ios17 observation-framework

10
推荐指数
1
解决办法
1169
查看次数