1

我有以下视图文件:

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也需要这个对象,以及如何让我免于这项工作。我试图将其设为progress私有,但这不起作用。我在这个视图中定义类和所有其他东西,我只需要它自己和孩子的孩子。

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

4

1 回答 1

1

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

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

    // ... other code
于 2020-11-06T12:00:44.950 回答