如何在 SwiftUI 中使用 EnvironmentObject 初始化 State 属性?
Posted
技术标签:
【中文标题】如何在 SwiftUI 中使用 EnvironmentObject 初始化 State 属性?【英文标题】:How to use EnvironmentObject to initialize State Property in SwiftUI? 【发布时间】:2021-01-15 15:59:24 【问题描述】:我在使用来自 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 中的数据初始化状态?
感谢您的帮助。
【问题讨论】:
你最好不要使用@EnvironmentObject
,而是正确注入Settings
并将其存储为@ObservedObject
。
【参考方案1】:
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 !!
【讨论】:
请问你是怎么知道EnvironmentObject是在视图构造函数调用后注入的? @onthemoon,当我尝试从.onAppear
方法访问环境对象时出现错误 No ObservableObject of type "" found
以上是关于如何在 SwiftUI 中使用 EnvironmentObject 初始化 State 属性?的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI:Gesture var 是不是可能移入 EnvironmentObject?
如何使用 SwiftUI 在 UICollectionViewCell 中填充内容
如何在 SwiftUI 中使用 SFSafariViewController?
解决运行maven 出现-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environme