[尝试遵循this discussion,我实现了Yurii Kotov的建议:
struct ContentView: View {
@State private var index = 0
@ViewBuilder
var body: some View {
if index == 0 {
MainView()
} else {
LoginView()
}
}
效果很好。但是,如果我尝试使用switch语句代替:
switch index {
case 0: MainView()
case 1: LoginView()
default:
print("# error in switch")
}
没有任何反应。没有错误警报,也没有任何结果。有人可以帮忙吗?
if...else
和switch...case
语句不相等。主要思想是:body
只是View protocol的计算变量,它应该返回其类型。当然,您可以使用switch...case
语句来完成此操作。您的代码段错误是在default
语句中:body无法返回() -> Void
,只有some View
。因此您的代码应如下所示:
struct ViewWithSwitchStatements: View {
@State var option = 0
var body: some View {
switch option {
case 1:
return AnyView(Text("Option 1"))
case 2:
return AnyView(Text("Option 2"))
default:
return AnyView(Text("Wrong option!"))
}
}
}
但是您不能将其放入VStack
或其他内容,例如if...else
语句。