swift - 如何在 SwiftUI 中使用枚举控制 View 状态

标签 swift struct swiftui enums viewstate

如果这是一个愚蠢的问题,我深表歉意,我是 Swift 和编程新手。我试图弄清楚如何使用枚举控制 SwiftUI 中的 View 状态。我试图将其他 View 结构保留在 ContentView 之外,但问题是我无法弄清楚如何写入 currentView 来更改其在 ContentView 之外的大小写。例如,如果我点击 StartView 中的按钮,如何影响位于不同结构中的变量 currentView

struct ContentView: View {
    
    enum ViewType {
        case start
        case settings
        case game
        case finish
    }
    
    @State var currentView = ViewType.start
    
    var body: some View {
        
        Group {
            
            if currentView == .start {
                StartView()
    
            } else if currentView == .settings {
                SettingsView()
                
            } else if currentView == .game {
                GameView()
                
            } else if currentView == .finish {
                GameOverView()
            }
        }
    }
}

struct StartView: View {
    
    var body: some View {
        Text("start")
        Button(action: {
            // How can I update my view state from within this struct?
        }, label: {
            Text("Button")
        })
    }
}

任何帮助或资源链接将不胜感激。

谢谢。

最佳答案

workingdog commented ,只需在每个 subview 中添加 @Binding 即可:

struct StartView: View {
    @Binding var currentView: ViewType
}
struct SettingsView: View {
    @Binding var currentView: ViewType
}
struct GameView: View {
    @Binding var currentView: ViewType
}
struct GameOverView: View {
    @Binding var currentView: ViewType
}

然后,只需将 @State 传递给每个人即可。每个 subview 的 @Binding var currentView 中所做的所有更改都将同步到 ContentViewcurrentView

if currentView == .start {
    StartView(currentView: $currentView)
} else if currentView == .settings {
    SettingsView(currentView: $currentView)
} else if currentView == .game {
    GameView(currentView: $currentView)
} else if currentView == .finish {
    GameOverView(currentView: $currentView)
}

关于swift - 如何在 SwiftUI 中使用枚举控制 View 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68931354/

相关文章:

swift - 快速移动 NSButton

c++ - 如何访问和存储 vector 类型的结构成员?

c - 如何访问嵌套结构并访问其要使用的内容?

struct - 去深/浅复制

core-data - @FetchRequest 中的 SwiftUI 和动态 NSSortDescriptors

ios - 文本字段键盘类型在 SwiftUI 中不起作用

ios - .toolbar {} 中的 ToolbarItemGroup 在工作表中不起作用

ios - 通过 AirDrop 发送即时创建的 QR 码 UIImage 失败

ios - XPath 在 Swift 中无法正常工作

ios - 数据从 UITextField 传递到 HTML,在 iOS 中反之亦然