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

9

我在使用EnvironmentObject中的数据初始化State时遇到了小问题。

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

显然,我会收到以下错误消息:'self' used before all stored properties are initialized.

问题:如何使用EnvironmentObject中的数据初始化State?

感谢您的帮助。


最好不要使用@EnvironmentObject,而是正确注入Settings并将其存储为@ObservedObject - Dávid Pásztor
1个回答

6

EnvironmentObject在视图构造函数调用之后注入,因此您需要在顶层body视图的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 !!
    }
}

3
请问您是如何知道在视图构造函数调用后注入EnvironmentObject的呢? - onthemoon
1
@onthemoon,当我尝试从.onAppear方法中获取环境对象时,我得到了错误 找不到类型为""的ObservableObject - Ildar Zaripov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接