「SwiftUI」 ForEachでidを設定しつつindexを取得する方法
ForEachで同じViewを繰り返そうとした時に回した回数(index)を知りたかったケースがあったので、メモとして残しておきます。
先にサンプルのコードを記載しておきます。
struct TestView: View { var languages = ["Swift", "Ruby", "Python"] var body: some View { VStack { ForEach(Array(languages.enumerated()), id: \.offset) { index, language in Text("index \(index) : language \(language)") } } } }
ForEach文のindexにインデックス番号、languageにインデックス番号に対応する要素が入ります。 「id: \.offset」はデータを一意に識別するためのキーとしてインデックス番号を指定しています。 インデックス番号でなく、要素(ここではlanguage)をキーとしたい場合は、id: \.elementとしてください。
ちなみにですが、enumerated()が何をしているのかというと、こんな感じです。
var languages = ["Swift", "Ruby", "Python"] for (index, language) in languages.enumerated() { print("\(index): '\(language)'") } // 出力結果 0: 'Swift' 1: 'Ruby' 2: 'Python'
公式ドキュメントはこちらです。 developer.apple.com