在 SwiftUI App 结构中使用 @StateObject 属性包装器的原因?

use*_*929 9 swiftui

这是来自有关 SwiftUI App 协议的 Apple 文档:

@main
struct Mail: App {
    @StateObject private var model = MailModel()

    var body: some Scene {
        WindowGroup {
            MailViewer()
                .environmentObject(model) // Passed through the environment.
        }
        Settings {
            SettingsView(model: model) // Passed as an observed object.
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么在这种情况下我们需要使用@StateObject propertyWrapper?为什么普通财产还不够?

我怀疑“App”结构是一个配置对象,就像 SwiftUI 中的视图一样?并且我们不能指望该结构在主体被读取后仍然存在?正确的?

Asp*_*eri 3

根据苹果公司的@StateObject保证,model

@StateObject private var model = MailModel()
Run Code Online (Sandbox Code Playgroud)

只会被创建一次。这就是所有的区别@ObservedObject。因此,如果这对您来说并不重要(或情况并非如此)并且您不需要在该级别观察它,那么您可以使用常规属性声明。