如果这是一个愚蠢的问题,我深表歉意,我是 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
中所做的所有更改都将同步到 ContentView
的 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)
}
关于swift - 如何在 SwiftUI 中使用枚举控制 View 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68931354/