Motherview 中缺少 ObservableObject

ObservableObject is missing in Motherview

我有以下视图文件:

import SwiftUI

class Progress: ObservableObject {
    @Published var index = 0
}

struct RegistrationView: View {
    @ObservedObject var progress: Progress
    var body: some View {
        TabView(selection: $progress.index) {
            setUsernameView(progress: self.progress).tabItem{}.tag(0)
            setMasterPasswordView().tabItem{}.tag(1)
        }
        .tabViewStyle(PageTabViewStyle(indexDisplayMode: .always))
    }
}

当我完成 setUserNameView() 时,我想将索引更新为 1,以便它切换到 setMasterPasswordView。我将 progress 传递给视图,然后在内部传递给 another view 以更新值。

现在 xcode 抱怨:Missing argument for parameter 'progress' in call 呼叫在 contentView().

import SwiftUI

struct ContentView: View {
    var body: some View {
        RegistrationView()
    }
}

我的问题是,为什么 RegistrationView 上方的视图或任何其他视图也需要这个 object 以及如何让我免于这项工作。我试图将 progress 设为私有,但这不起作用。我在这个视图中定义 class 和所有其他东西,我只需要它本身和 child 的 child。

P.S。是否有更好的可观察 object 方法?例如,当我需要主视图中的值并可以在 child.child.child.view 中更改它时,我必须一直向下传递它。这似乎是一种不必要的工作。

如果您不打算在父视图中使用它,那么只需在本地使用 StateObject

struct RegistrationView: View {
    @StateObject var progress = Progress()    // << here !!

    // ... other code