我ForEach()以嵌套方式使用两个,一个用于显示部分,另一个用于显示列表视图的单个单元格。
我的问题是第一个中的迭代器变量ForEach在第二个中访问它时表现得非常奇怪ForEach。
在我附上的这个 gif 中,ri当我向上或向下滚动时,Round 后面的第一个变量(在下面的代码片段中)有时会更改其值。然而,这个变量的值在第一个中总是相同的ForEach,正如我们可以从部分名称看到的,显示的回合总是正确的。
这是带有嵌套ForEach语句的代码。但是,正如此处介绍的那样,您可能无法重现该错误。虽然可能迷信,但似乎我的视图越复杂,错误出现的可能性就越大。
List {
ForEach(Array(self.game.rounds.indices), id: \.self) { ri in
Section(header: Text("Round \(ri): \(self.game.rounds[ri])")) {
ForEach(Array(self.game.players.indices), id: \.self) { pi in
HStack {
Text("\(self.game.players[pi])")
Text("Round \(ri), Player \(pi)")
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是ForEach导致我出现问题的嵌套的完整视图:
https://github.com/charelF/carioca/blob/master/unote/GameView.swift
我相当确定我遇到的实际上是 SwiftUI 中的一个错误。但是我不确定,这种行为可能是预期的行为或某种单元格的异步加载。
要么我做错了什么,要么@Asperi 的答案似乎并没有真正解决问题。这是一个快速而肮脏的解决方法,我试图避免 ID 相同
List {
ForEach([10,11,12,13,14,15,16,17,18,19] /*Array(self.game.rounds.enumerated())*/, id: \.self) { ri in
Section(header: Text("Round \(ri-10): \(self.game.rounds[ri-10])")) {
ForEach(Array(self.game.players.indices), id: \.self) { …Run Code Online (Sandbox Code Playgroud)