【问题标题】:Swiftui foreach inside parameterSwiftui foreach 内部参数
【发布时间】:2021-11-02 02:07:02
【问题描述】:

如何在视图参数中进行foreach

这是我的代码

  CarouselView(itemHeight: 124, views: [
                                SliderItemView(),
                                SliderItemView(),
                                SliderItemView(),
                ])

我想迭代并显示带有循环的 SliderItemView

【问题讨论】:

    标签: swift foreach swiftui


    【解决方案1】:

    ForEach 无法创建数组。如果您想创建这些视图的数组,一种方法是[0..<3].map { _ in SliderItemView() }

    【讨论】:

    • 结果仍然只显示一个 SliderItemView()
    • 您如何处理CarouselfView 内部的视图?您需要展示更多代码。
    • @ScottThompson:为什么不呢? ForEach 可用于重复视图!那里没有问题。在这种情况下,不需要视图数组,只需 ForEach 处理的内容。
    • ForEach 当然可以用于创建多个视图。但是ForEach 是一个struct 它不是一个Array。这正是我所说的。原始发帖人询问有关使用ForEach 创建多个视图的问题,并演示了在Array 中传递这些视图。 ForEach 无法做到这一点。
    • 我从一开始就知道,但是你帮他走错了路,否则我会说你给出了正确的答案或错误的方式。我还提到了 OP 可能不需要或不应该使用视图数组。
    【解决方案2】:

    这里有两种解决问题的方法:

    struct ContentView: View {
        
        var body: some View {
    
            CustomViewV1(content: {
    
                ForEach(0...2, id:\.self) { _ in Text("Hello, World!").foregroundColor(Color.blue) }
    
            })
    
            CustomViewV2(repeating: 3, content: { Text("Hello, World!").foregroundColor(Color.red) })
            
        }
        
    }
    
    
    
    struct CustomViewV1<Content: View>: View {
        
       @ViewBuilder let content: () -> Content
        
        var body: some View {
            
            return content()
            
        }
        
    }
    
    struct CustomViewV2<Content: View>: View {
        
        let repeating: Int
        @ViewBuilder let content: () -> Content
        
        var body: some View {
    
            if (repeating >= 1) {
                
                ForEach(1...repeating, id:\.self) { _ in
                    
                    content()
                    
                }
                
            }
            
        }
        
    }
    

    结果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多