我不确定这是否是我们生活在这个勇敢的新SwiftUI世界中的反模式,但是从本质上来说,我有一个@EnvironmentObject,其中保存了一些我的 View 可以调用的基本用户信息。

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

当 View 出现时,我想使用该@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:



我可以看到一些可能的前进路线,但是它们都像黑客一样。我应该如何处理?

最佳答案

这是方法(最简单的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)")
    }
}

10-07 21:53