首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwiftUI创建字典以保存不同的视图

SwiftUI创建字典以保存不同的视图
EN

Stack Overflow用户
提问于 2020-08-10 05:37:52
回答 1查看 131关注 0票数 1

我正在尝试构建一个非常简单的SwiftUI程序来轻松地交换视图。目标是尽可能简单地添加更多视图,而不必更改确定视图方式的代码(因此标准if-else将无法工作)。

我目前的想法是保留一个字典,将视图存储为键-值对的一部分。下面是一个非常基本的实现示例:

代码语言:javascript
复制
import SwiftUI

struct ViewA: View {
  var body: some View {
    Text("This is View A")
  }
}

struct ViewB: View {
  var body: some View {
    Text("This is View B")
  }
}

struct MainView: View {
  
  var subviews: [String:View] = [
    "View-1": ViewA(),
    "View-2": ViewB(),
  ]
  
  var body: some View {
    self.subviews["View-1"]
  }
}

然而,我在创建字典的行上得到了一个错误:Protocol 'View' can only be used as a generic constraint because it has Self or associated type requirements

对于字典的值部分,我尝试了许多不同的类型,包括AnyViewGroups和在MainView结构上创建泛型类型<Content: View>。然而,这些方法会产生更多/不同的错误。

我看过SwiftUIRouter项目,因为它在某种程度上解决了我想要达到的目标,但是我的目标有点简单。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-08-10 07:12:41

Swift没有命名的下标,所以你必须把它拼凑在一起,但你可以使用相同的调用语法,否则会更有用/更好的语言特性:

代码语言:javascript
复制
struct MainView: View {
  var body: some View {
    subviews["View-1"]
  }
  
  enum subviews {
    @ViewBuilder static subscript(string: String) -> some View {
      switch string {
      case "View-1":
        ViewA()
      case "View-2":
        ViewB()
      default:
        fatalError()
      }
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63331586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档