首页 > 解决方案 > SwiftUI - ForEach 与 Stride

问题描述

我试图创建一个 Hstack 卡片列表,也就是说,我想创建一系列行的滚动视图。每行将包含并排显示的两个视图的 HStack,并由一些列表数据结构初始化。

struct MyHStackView: View { 

    var myArray = [SomeStruct(1), SomeStruct(3), SomeStruct(4), SomeStruct(5), SomeStruct(6)]

    var body: some View {
        ScrollView(.vertical) { 
            VStack { 
                ForEach(0..<self.myArray.count) { index in 
                    HStack { 
                        SubView(myArray[index])
                        SubView(myArray[index+1]) 
            }
        } 
    }
} 

唯一的问题是我当前的实现触及了数组的每个元素,stride新的 ForEach 中是否内置了一个函数,以便我可以索引数组上的每个其他元素来初始化行?你会如何处理这个问题?

标签: swiftuiios13xcode11

解决方案


如果只是每隔一个,你可以试试

  VStack { 
            ForEach(0 ..< self.myArray.count/2) { index in 
                HStack { 
                    SubView(myArray[index * 2])
                    SubView(myArray[index * 2 + 1]) 
        }

否则,您可能需要使用stride以下功能:

    ForEach( Array(stride(from: 0, to: self.myArray.count, by: 2)), id: \.self) { index in

推荐阅读