如何使用EnvironmentObject在SwiftUI中初始化State属性?

chr*_*epe 10 environment state initialization swift swiftui

我在State使用来自 的数据初始化 a 时遇到了一个小问题EnvironmentObject

@EnvironmentObject var settings: Settings
    
@State var localAllowReminders: Bool
    
init() {
    self._localAllowReminders = State(initialValue: settings.allowReminders)
}
Run Code Online (Sandbox Code Playgroud)

显然,我收到以下错误消息:在初始化所有存储的属性之前使用了“self”。

问题:如何使用环境对象中的数据初始化状态?

感谢您的帮助。

Asp*_*eri 8

EnvironmentObject在视图构造函数调用后注入,因此您必须将状态初始化为默认值并将其重置为顶部主体视图onAppear修饰符中的所需值,例如

@EnvironmentObject var settings: Settings
@State var localAllowReminders: Bool = false   // << just any default
    
var body: some View {
    VStack {       // << any top view
        // ...
    }
    .onAppear {
       self.localAllowReminders = settings.allowReminders   // << here !!
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我可以知道你怎么知道在视图构造函数调用后注入了EnvironmentObject吗? (3认同)