SwiftUI:如何使用 ForEach 循环使用各种代码的各种结构?

Posted

技术标签:

【中文标题】SwiftUI:如何使用 ForEach 循环使用各种代码的各种结构?【英文标题】:SwiftUI: How to loop through the various structs with various codes, using ForEach? 【发布时间】:2020-05-16 09:39:28 【问题描述】:

假设,我有三个名为“s001”、“s002”、“s003”的结构。是否可以使用 ForEach 循环来迭代这些结构,而不将它们附加到数组中?

在示例代码下方,仅循环一个结构 (s001)。是否可以使用“s00+(index)”之类的动态结构名称?

import SwiftUI

struct ContentView: View 


var body: some View 
    ForEach((1...3), id: \.self) index in
               AnyView(s001())

    

  


struct s001: View var body: some View Rectangle().foregroundColor(.red)
struct s002: View var body: some View Circle().foregroundColor(.blue)
struct s003: View var body: some View Ellipse().foregroundColor(.yellow)

struct ContentView_Previews: PreviewProvider 
    static var previews: some View 
        ContentView()
     

【问题讨论】:

【参考方案1】:

使用AnyView 是可能的,但存在性能缺陷,因此对于所描述的场景,由于这样的结构不应该太多,适当的方法是使用类似 view-factory-builder 的函数,如下所示

struct S00ContentView: View 

    var body: some View 
        ForEach((1...3), id: \.self) index in
            self.buildView(for: index)
        
    

    func buildView(for id: Int) -> some View 
        Group 
            if id == 1 
                s001()
            
            else if id == 2 
                s002()
            
            else if id == 3 
                s003()
            
        
    


struct s001: View var body: some View Rectangle().foregroundColor(.red)
struct s002: View var body: some View Circle().foregroundColor(.blue)
struct s003: View var body: some View Ellipse().foregroundColor(.yellow)

【讨论】:

非常感谢,Asperi,但我想在我的应用程序中拥有多达 20 个不同的结构。所以这将是一段非常长的代码...... 好的,接受。 :))) 我只是在寻找更优雅的解决方案......

以上是关于SwiftUI:如何使用 ForEach 循环使用各种代码的各种结构?的主要内容,如果未能解决你的问题,请参考以下文章

Swiftui 如何在 foreach 循环中对整行使用 Tap Gesture

SwiftUI 中按钮操作内的 ForEach 循环?

如何在不使用swiftUI附带的幻灯片删除的情况下创建自定义删除按钮我没有使用列表,只是使用foreach循环

如何在 forEach 循环中删除一个项目,每个项目都有一个 delete btn。我将 swiftUI 与核心数据一起使用

SwiftUI 如何让 ForEach 循环根据 Picker 中选定月份的天数进行迭代

使用 ForEach 循环制作多行 Component() ? [SwiftUI]