Ios Swiftui-如何使用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=

我不确定这是否是我们所生活的这个崭新的SwiftUI世界中的反模式,但实际上我有一个@EnvironmentObject,其中保存了一些基本的用户信息,我的视图可以调用这些信息

我还有一个@ObservedObject,它拥有此视图所需的一些数据

当视图出现时,我想使用@EnvironmentObject初始化@ObservedObject:

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)")
    }
}