在SwiftUI ViewBuilder块中切换语句的替代方法?
️
我一直在尝试使用SwiftUI复制我的应用程序。它有一个RootViewController,根据枚举值,它显示了一个不同的子视图控制器。与在SwiftUI中一样,我们使用视图而不是视图控制器,我的代码如下所示:
struct RootView : View { @State var containedView: ContainedView = .home
var body: some View {
// custom header goes here
switch containedView {
case .home: HomeView()
case .categories: CategoriesView()
...
}
}
}
不幸的是,我收到警告:
包含控制流语句的闭包不能与function builder一起使用
ViewBuilder
。
因此,是否有其他选择可以切换,以便我可以复制此行为?
回答:
谢谢大家的回答。我已经在 上找到了解决方案。 (
回答了。解决方案是按照Lu_,Linus和Mo的建议在函数中提取开关,但是我们必须包装视图AnyView
才能使其起作用–如下所示:
struct RootView: View { @State var containedViewType: ContainedViewType = .home
var body: some View {
VStack {
// custom header goes here
containedView()
}
}
func containedView() -> AnyView {
switch containedViewType {
case .home: return AnyView(HomeView())
case .categories: return AnyView(CategoriesView())
...
}
}
以上是 在SwiftUI ViewBuilder块中切换语句的替代方法? 的全部内容, 来源链接: utcz.com/qa/407738.html