如何使用swiftUI MacOS切换视图?

如何使用swiftUI MacOS切换视图?,swift,swiftui,Swift,Swiftui,我发现了这个问题——但我还没有找到适合我工作的答案 struct view4x: View { @State var goView: Bool = false var body: some View { if goView { view5x(goView1: self.$goView) } else { Form { /* ... */ }

我发现了这个问题——但我还没有找到适合我工作的答案

struct view4x: View {

    @State var goView: Bool = false

    var body: some View {
        if goView {
            view5x(goView1: self.$goView)
        } else {
            Form {
                /* ... */
            }
        }
    }
}
按钮位于窗体内:

Button(action: {
     self.goView.toggle()
}) {
     Text("Catalog")
}
我的另一个观点是:

struct view5x: View {

    @Binding var goView1: Bool

    var body: some View {
        Text("TEST")
        Button(action: {
            self.goView1.toggle()
        }) {
            Text("Return")
        }
    }
}

我只是得到两个实体都声明不透明返回类型的错误。它不会预览。

好的,这里是您视图中的类似错误。为了更好地理解它们,请查看查看协议:

@可提供iOS 13.0、OSX 10.15、tvOS 13.0、watchOS 6.0、* 公共协议视图{ ///表示此视图主体的视图类型。 /// ///创建自定义视图时,Swift会根据您的 ///所需“body”属性的实现。 associatedtype主体:视图 ///声明此视图的内容和行为。 var body:Self.body{get} } 所以,body只是一个计算变量,它应该返回一些视图。视图5x中的错误在于,您在其中放入了2个不同的视图,而不是1个。这里的解决方案是将它们嵌入到VStack中,例如:

结构视图5x:视图{ @绑定变量goView1:Bool var body:一些观点{ VStack{ 文本测试 按钮操作:{ 自我管理 } { 文本返回 } } } } view4x的问题类似——我认为,由于if…else语句,不清楚哪个视图返回body。您可以用相同的方法修复它:

结构view4x:视图{ @状态变量goView:Bool=false var body:一些观点{ VStack{ 如果政府认为{ view5xgoView1:$goView }否则{ 按钮操作:{ 自我管理 } { 文本目录 } } } } } 另一种方法是,如果将每个视图包装到AnyView中,并在前面键入return,则说明body应该返回哪个视图。在本例中,goView的更改不会切换视图,但您可以看到其他语法:

结构view4x:视图{ @状态变量goView:Bool=false var body:一些观点{ 如果政府认为{ 返回anyview5xgoview1:$goView }否则{ 返回任意视图按钮操作:{ 自我管理 } { 文本目录 } } } }