SwiftUIでForEach構文を用いて並べたビューを、タップジェスチャーに個別に反応するようにする方法について
解決したいこと
SwiftUIでForEach構文を用いて並べたビューを、タップしたら、タップされたビューだけが色が変わるように動かしたかったため、まずは以下のテストコードを作成しました。
質問ですが、
このテストコードで、とりあえずは期待する結果を得られたのですが、ビューの数が以下コードのように3つだけでなくもっと多いとき(テストコードは1行3列ですが、20行30列の場合など)でも、同じような実装方法で良いでしょうか。
私のやり方のままでは、ビューの数と同じ数だけ@State変数を用意しなければならず、もっと良いやり方があるように思えてならないため、質問させていただきました。
何かお気づきの方、ご指摘よろしくお願いいたします
該当するソースコード
//Xcodeのバージョン Version 12.3 (12C33)
//Swiftのバージョン Apple Swift version 5.3.2
import SwiftUI
struct ContentView: View {
@State var tapped = [false, false, false]
var body: some View {
HStack(spacing: 20) {
ForEach(0 ..< 3){ i in
Text("\(i)")
.frame(width: 50, height: 50)
.font(.custom("default", size: 30))
.background(self.tapped[i] ? Color.blue : Color.red)
.onTapGesture {
tapped[i].toggle()
}
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
0