我正在寻找创建一个可以由视图模型(不仅仅是视图)访问的 EnvironmentObject。
Environment 对象跟踪应用程序会话数据,例如登录、访问令牌等,这些数据将被传递到视图模型(或需要时的服务类)以允许调用 API 以从该 EnvironmentObjects 传递数据。
我试图将会话对象从视图传递给视图模型类的初始化程序,但出现错误。
如何使用 SwiftUI 访问/传递 EnvironmentObject 到视图模型中?
我不确定这是否是我们生活在这个勇敢的新 SwiftUI 世界中的反模式,但基本上我有一个 @EnvironmentObject,其中保存了一些基本的用户信息,我的视图可以调用。
我还有一个@ObservedObject,它拥有此视图所需的一些数据。
当视图出现时,我想使用@EnvironmentObject 来初始化@ObservedObject:
struct MyCoolView: View {
@EnvironmentObject userData: UserData
@ObservedObject var viewObject: ViewObject = ViewObject(id: self.userData.UID)
var body: some View {
Text("\(self.viewObject.myCoolProperty)")
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,在初始化之前,我无法在环境变量上调用 self :
“不能在属性初始值设定项中使用实例成员‘userData’;属性初始值设定项在‘self’可用之前运行。”
我可以看到一些可能的前进路线,但它们都感觉像是黑客。我应该如何处理这个问题?