swift - 如何在 SwiftUI 中使用枚举控制视图状态
问题描述
如果这是一个愚蠢的问题,我深表歉意,我是 Swift 和编程的新手。我试图弄清楚如何使用枚举在 SwiftUI 中控制我的视图状态。我试图将我的其他视图结构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")
})
}
}
任何帮助或资源链接将不胜感激。
谢谢你。
解决方案
正如工作狗评论@Binding
的那样,只需在每个子视图中添加s :
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
给他们每个人。在每个子视图中所做的所有更改都@Binding var currentView
将同步到ContentView
's currentView
。
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)
}
推荐阅读
- sql - 每个季度产出前 3 名最赚钱的产品
- php - 在 WordPress 中为 Visual Form Builder 处理表单提交
- php - Wordpress 无效参数
- ruby - 如何使用 Ruby 在 Windows 10 上安装 FREETDS
- apache - 为什么tomcat不能与netbeans(8.2)网络中的代理设置一起使用?
- python - Openpyxl 将单元格值格式化为字符串
- python - python:动态创建的类中的名称修改
- matlab - Octave 中一张图表中的多个条形图
- bash - 将 awk-for 循环变量的值分配给 bash 变量
- php - 从 json 中检索字符串