⚠️ 23 June 2020 Edit: From Xcode 12, both switch and if let statements will be supported in the ViewBuilder!

我一直在try 用SwiftUI复制我的一个应用程序.它有一个RootViewController,它根据枚举值显示不同的子视图控制器.在"我的视图"中,我们使用的是以下代码,而不是"我的视图"中的控制器:

struct RootView : View {
   @State var containedView: ContainedView = .home

   var body: some View {
      // custom header goes here
      switch containedView {
         case .home: HomeView()
         case .categories: CategoriesView()
         ...
      }
   }
}

不幸的是,我收到了一个警告:

Closure containing control flow statement cannot be used with function builder 100

那么,有没有其他方法可以切换,这样我就可以复制这种行为?

推荐答案

⚠️ 23 June 2020 Edit: From Xcode 12, both switch and if let statements will be supported in the ViewBuilder!

谢谢你们的回答,伙计们.我在Apple’s Dev Forums上找到了解决办法.

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())
     ... 
  }
}

Swift相关问答推荐

是否有一个Kotlin等价的Swift s @ AddendableReport注释'

Swift C外部实现的Task / Future类类型

快速并行读取进程 standardOutput 和 standardError 而不会阻塞

为什么 Swift URL 的 init?(string: String,relativeTo: URL?) 仅添加协议?

如何根据 DatePicker 中选定的日期实现 TabView 页面切换?

使用UICollectionViewFlowLayout创建水平的UICollectionView,并同时将单元格对齐到左边和右边的能力

如何在闭包中使用构造 await sync

使第二个视图变灰 SwiftUI

NavigationStack 和 TabView - 工具栏和标题不显示

如何制作进度加载动画?

如何在不提交到应用store 的情况下在本地运行我的应用

SwiftUI:异步网络请求后@State 值不更新

来自数据的 SwiftUI 图像

Subclass.fetchRequest() Swift 3.0,扩展并没有真正帮助 100%?

在swift 3中将文件保存在文档目录中?

如果没有标记,则为 Swift 预处理器

如何删除桥头而不出错?

在 unwind segue 之后执行 push segue

两个 Date 对象之间的所有日期 (Swift)

TabView 在切换选项卡时重置导航堆栈