Swiftui foreach 内部参数

Posted

技术标签:

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

如何在视图参数中进行foreach

这是我的代码

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

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

【问题讨论】:

【参考方案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()
                
            
            
        
        
    
    

结果:

【讨论】:

以上是关于Swiftui foreach 内部参数的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI ListView 没有访问 ForEach 循环

从 ForEach 中引用变量时,SwiftUI“无法推断通用参数'数据'”

ForEach 中的 SwiftUI 索引超出范围

使用简写参数名称 $0 在 ForEach 中为 SwiftUI 添加按钮

如何在 SwiftUI 中使用 Foreach 视图?

在 SwiftUI 中的 forEach 期间将文本字段输入添加到数组