我可以做一个静态列表,比如

List {
   View1()
   View2()
}

但是如何从数组中生成元素的动态列表呢?

    let elements: [Any] = [View1.self, View2.self]

    List {
       ForEach(0..<elements.count) { index in
          if let _ = elements[index] as? View1 {
             View1()
          } else {
             View2()
          }
    }
}

有什么办法吗?

推荐答案

看起来答案与将我的观点包装在AnyView以内有关

struct ContentView : View {
    var myTypes: [Any] = [View1.self, View2.self]
    var body: some View {
        List {
            ForEach(0..<myTypes.count) { index in
                self.buildView(types: self.myTypes, index: index)
            }
        }
    }
    
    func buildView(types: [Any], index: Int) -> AnyView {
        switch types[index].self {
           case is View1.Type: return AnyView( View1() )
           case is View2.Type: return AnyView( View2() )
           default: return AnyView(EmptyView())
        }
    }
}

有了它,我现在可以从服务器上获取视图数据并将其组合起来.此外,它们仅在需要时才实例化.

Swift相关问答推荐

如何消除SwiftUI中SF符号的填充

字符串目录不适用于SWIFT包

.onReceive NSWindow.CloseNotify是否会为App中的每个窗口调用?

RxSwift .debounce,.throttle用于分页

无法创建MKAssociateRegion对象

如何使用变量 Select 哪个向量(?)在我的 struct 中密谋吗?

物理主体未与 spritekit Swift 的网格图案上的纹理图像对齐

我如何在 swift 中的 viewdidload 之前进行委托?

暂停我的 AR 会话并清除变量和锚点的功能

Swift String.firstIndex(of: "\n") 返回 nil,即使字符串有 \n

Swift:结果的失败类型不能是协议 - Type 'any ShadowError' cannot conform to Error

避免 `(())` 显式指定 Void 类型的枚举关联值

如何在 AppDelegate for Cocoa macOS 中创建 mainMenu 和菜单项?

Swift 并发:@MainActor 对象上的通知回调

Swift:创建用于调用 C 函数的指针数组

如何使用 Swinject 注册符合 ObservableObject 的协议?

如何防止 UITableViewCell 移动(Swift 5)

使 struct 可散列?

使用 Swift 以编程方式自定义 UITableViewCell

如何快速格式化用户显示(社交网络等)的时间间隔?