首页 > 解决方案 > SwiftUI 无法在函数上返回视图

问题描述

我正在尝试返回View基于功能的选定菜单项。但它会引发错误:

协议“视图”只能用作通用约束,因为它具有自身或相关类型要求。

那里有我的代码:

enum MenuItem {
  case Main
  case Report
}
struct Menu: View {
  @State var activeItem: MenuItem = .Main

  private func getActiveView() -> View {
    switch activeItem {
      case .Main:
        return DashboardView()
      case .Report:
        return ReportView()
    }
  }

  var body: some View {
    ...
    getActiveView()
    ...
  }
}

struct DashboardView: View {
    var body: some View {
        Text("Contact")
    }
}
struct ReportView: View {
    var body: some View {
        Text("Contact")
    }
}

我是新手SwiftUI。任何想法如何返回View

标签: swiftswiftui

解决方案


SwiftUI 2

这是使用 Xcode 12b / iOS 14 测试的解决方案

struct Menu: View {
    @State var activeItem: MenuItem = .Main

    // make function ViewBuilder
    @ViewBuilder
    private func getActiveView() -> some View {
        switch activeItem {
        case .Main:
            DashboardView()     // don't use 'return' as it disables ViewBuilder
        case .Report:
            ReportView()
        }
    }

    var body: some View {
        getActiveView()
    }
}

推荐阅读