ForEachを使用したとき、下図のように「Non-constant range: argument must be an integer literal」という警告がでたことはありませんか?

今回はその場合の対処法をご紹介します。
対処法は至って簡単。ForEach の id を指定すればOKです。
struct ContentView: View {
let list: [String] = ["a","b","c"]
var body: some View {
VStack {
ForEach(0..<list.count, id: \.self) { val in
Text("\(val)")
}
}
.padding()
}
}
ForEach の対象オブジェクトは一意性が保証されていることが必須であり、対象オブジェクトを一意に識別ができる値を ForEach に渡す必要があるからです。
おそらく、ForEach の処理の中で二重処理を行わないように一意に識別できる値を使用するのだと思われます。
ForEach の扱い方については、こちらのサイトを参考にさせていただきました。