Swiftui - 如何使用环境对象作为参数初始化观察对象?

Swiftui - How do I initialize an observedObject using an environmentobject as a parameter?

我不确定在我们生活的这个勇敢的新 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)")
    } 
}

不幸的是,在初始化之前我无法在环境变量上调用 self:

"Cannot use instance member 'userData' within property initializer; property initializers run before 'self' is available."

我可以看到一些可能的前进路线,但它们都感觉像是 hack。我应该如何处理这个问题?

这是方法(最简单的 IMO):

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

backup