枚举是一个不错的选择,因为它们具有固定数量的可能值,并且可以具有描述性名称,这两者都将有助于您的视图代码更具可读性。
首先要做的是定义一个枚举,它为您声明可能的选项:
enum ViewChoice { // you probably want a better name than this
case palindrome, anagram, pangram
}
那么在你的父视图中,你的状态变量需要是这种类型的
struct CheckerView: View {
@State private var toView: ViewChoice = .palindrome
// ...
}
然后你的选择器应该在每个选项的标签中使用枚举值:
Picker(..., selection: $toView) {
Text("Palindrome").tag(ViewChoice.palindrome)
// etc.
}
一旦这些更改到位,您应该让toView 像以前一样继续更新,但它只能是三个选择之一。
然后您可以使用switch 语句来包含适当的子视图:
switch(toView) {
case .palindrome:
PalindromeView()
case .anagram:
AnagramView()
case .pangram:
PangramView()
}
请注意,您不必使用枚举:您当前将toView 设置为整数并在选取器中正确更改其值。因此,您可以使用case 0、case 1 等编写 switch 语句 - 但这些数字不仅比使用名称更易读,还必须在 switch 语句中添加 default 选项,因为无论何时使用switch 您必须考虑所有可能的可能性,并且整数可能是 0、1 或 2 以外的其他值,即使这些是您使用的唯一值。
另请注意,包括代码截图对于人们阅读和回答来说是棘手的 - 最好将代码内联,就像我在这里所做的那样。请参阅 Stack Overflow 帮助指南中的 How do I ask a good question?。