如何保留嵌套循环的计数器



我有一个需要遍历的2D数组,其中每个内部循环都会添加一个新的View。我尝试过在onAppear上设置一个@State变量并将其增加一,就像这个简化的例子一样:

struct ContentView: View {
@State private var counter = -1

var body: some View {
ForEach(0...2, id: .self) { i in
ForEach(0...2, id: .self) { j in
Text("Iteration #(counter)")
.onAppear {
counter += 1
}
}
}
}
}

但它给了我九个文本视图;迭代#8";。如何让它像计数器一样显示从0到8的每个值?

ForEach实际上只是用于构建需要重复使用相同模型的视图。在这种情况下,我将递增逻辑分离为一个函数。然后,您可以使用此函数的结果来构造一个视图,该视图可以根据需要创建任意数量的文本字段。请注意,ForEach一直计算到iterateCounter函数的返回值。

这可能不是你需要的确切数学,但你可以修改数字,让它为你工作!

struct ContentView: View {
@State private var counter = -1

var count: Int {
iterateCounter()
}

var body: some View {
ScrollView {
ForEach(0...count, id: .self) { i in
Text("Iteration #(i)")
}
}
}

func iterateCounter() -> Int {
var count1 = 0
var count2 = 0

for _ in 0...2 {
count1 += 1
for _ in 0...2 {
count2 += 2
}
}
return count1 + count2
}
}

最新更新