@State变量必须在主线程更新吗?

问题描述 投票:0回答:1

有些文章说@State变量必须在主线程中更新。但我做了一些测试,发现在后台线程中更新 @State 变量是可以的。这是我的代码:

import SwiftUI

@Observable
class ViewModel {
    var name = "old name"
}

struct ContentView: View {
    @State var viewModel = ViewModel()
    @State var title = "old title"

    var body: some View {
        VStack {
            Text(viewModel.name)
            Text(title)
        }
        .onAppear {
            Task.detached {
                viewModel.name = "new name"
                title = "new title"
            }
        }
    }
}

#Preview {
    ContentView()
}

我想知道在后台线程中更新@State变量是否正确?这样做有什么缺点?谢谢。

swiftui state
1个回答
0
投票

@State
意味着每当对象发生变化时,都会导致观察者更新。在这种情况下,它们是:

Text(viewModel.name)
Text(title)

如果您在后台线程上使用

@State
也没关系,因为
body
本身始终位于主线程上:

@ViewBuilder @MainActor var body: Self.body { get }
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.