Ios Swiftui-如何使用environmentobject作为参数初始化observedObject?
我不确定这是否是我们所生活的这个崭新的SwiftUI世界中的反模式,但实际上我有一个@EnvironmentObject,其中保存了一些基本的用户信息,我的视图可以调用这些信息 我还有一个@ObservedObject,它拥有此视图所需的一些数据 当视图出现时,我想使用@EnvironmentObject初始化@ObservedObject:Ios Swiftui-如何使用environmentobject作为参数初始化observedObject?,ios,swift,swiftui,xcode11,Ios,Swift,Swiftui,Xcode11,我不确定这是否是我们所生活的这个崭新的SwiftUI世界中的反模式,但实际上我有一个@EnvironmentObject,其中保存了一些基本的用户信息,我的视图可以调用这些信息 我还有一个@ObservedObject,它拥有此视图所需的一些数据 当视图出现时,我想使用@EnvironmentObject初始化@ObservedObject: struct mycolview:View{ @环境对象用户数据:用户数据 @ObservedObject变量viewObject:viewObject=
struct mycolview:View{
@环境对象用户数据:用户数据
@ObservedObject变量viewObject:viewObject=viewObject(id:self.userData.UID)
变量体:某些视图{
文本(\(self.viewObject.myColProperty)“)
}
}
很遗憾,在初始化之前,我无法对环境变量调用self:
“无法在属性初始值设定项中使用实例成员‘userData’;属性初始值设定项在‘self’可用之前运行。”
我可以看到一些可能的前进路线,但它们都感觉像黑客。我应该如何处理这个问题 以下是方法(最简单的IMO):
下面是一个简单的方法:
struct mycolview:View{
@环境对象变量userData:userData
var body:一些观点{
观察(obj:ViewObject(id:userData.UID)){ViewObject
文本(“\(viewObject.myColProperty)”)
}
}
}
使用此帮助器使其工作:
struct观察:视图{
@观察对象变量对象:T
让内容:(T)->V
var body:some视图{content(obj)}
}
也许你可以尝试向结构中添加一个自定义的init
。我尝试了一下,但得到了一个有点奇怪的错误:本地属性还不支持属性包装器
基本上是说我不能在init方法中创建@ObservedObject。这很完美。MyColView实际上是一个“家庭”视图的子视图,我在其中声明了ObservedObject。谢谢但是,如果您希望在每次都不创建全新的ViewObject的情况下操作ViewObject中的userData,该怎么办?
struct MyCoolView: View {
@EnvironmentObject var userData: UserData
var body: some View {
MyCoolInternalView(ViewObject(id: self.userData.UID))
}
}
struct MyCoolInternalView: View {
@EnvironmentObject var userData: UserData
@ObservedObject var viewObject: ViewObject
init(_ viewObject: ViewObject) {
self.viewObject = viewObject
}
var body: some View {
Text("\(self.viewObject.myCoolProperty)")
}
}