[解決済み] SwiftUIのForEachでインデックスを取得する
2022-10-20 11:54:51
質問
配列があり、それを繰り返し処理したいのですが、配列の値に基づいてビューを初期化し、配列のアイテムのインデックスに基づいてアクションを実行したいです。
オブジェクトを繰り返し処理する場合
ForEach(array, id: \.self) { item in
CustomView(item: item)
.tapAction {
self.doSomething(index) // Can't get index, so this won't work
}
}
そこで、別の方法を試してみました
ForEach((0..<array.count)) { index in
CustomView(item: array[index])
.tapAction {
self.doSomething(index)
}
}
しかし、2番目の方法の問題点は、配列を変更したときに、たとえば
doSomething
は次のようになります。
self.array = [1,2,3]
のビューを
ForEach
のビューは、値が変更されても変更されません。私が思うに、この現象は
array.count
が変化していないからだと思います。
これに対する解決策はあるのでしょうか?よろしくお願いします。
どのように解決するのですか?
これは私のために動作します。
範囲とカウントの使用
struct ContentView: View {
@State private var array = [1, 1, 2]
func doSomething(index: Int) {
self.array = [1, 2, 3]
}
var body: some View {
ForEach(0..<array.count) { i in
Text("\(self.array[i])")
.onTapGesture { self.doSomething(index: i) }
}
}
}
配列の添字を利用する
配列の
indices
プロパティは数値の範囲です。
struct ContentView: View {
@State private var array = [1, 1, 2]
func doSomething(index: Int) {
self.array = [1, 2, 3]
}
var body: some View {
ForEach(array.indices) { i in
Text("\(self.array[i])")
.onTapGesture { self.doSomething(index: i) }
}
}
}
関連
-
[解決済み] SwiftUIのテキストアライメント
-
[解決済み] Swiftでindexとelementでループを反復させる方法
-
[解決済み] 文字列の長さを取得する
-
[解決済み] Swiftでリストアイテムのインデックスを見つける方法は?
-
[解決済み] SwiftUIです。バインド変数でカスタムinitを実装する方法
-
[解決済み] Protocol ... can only be used as generic constraint because it has Self or associated type requirements "とは、どういう意味ですか?
-
[解決済み] SwiftUI。TextFieldをファーストレスポンダーにするには?
-
[解決済み] 既存のUIKitアプリケーションにSwiftUIビューを含める
-
[解決済み] Swift で UIViewController のサブクラス用のカスタムイニシャライザを作るには?
-
[解決済み] ボタンを無効化する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Swift Error fatal error: Optional value のアンラップ中に予期せず nil を発見した。
-
swift 4.0でのdispatch_async,dispatch_afterの使用について
-
[解決済み] Swiftダブルからストリング
-
[解決済み] Swift 3で現在の日付を取得する?[クローズド]
-
[解決済み] Swiftのリバースレンジ
-
[解決済み] Swiftで範囲を作成する方法は?
-
[解決済み] Swift: PREPROCESSORフラグ(`#if DEBUG`など)を使ってAPIキーを実装する方法とは?
-
[解決済み] 固定サイズのオブジェクトの配列を作成する方法
-
[解決済み] プロパティの型が内部型を使用しているため、publicを宣言することができない
-
[解決済み] Swift - サブクラスでオーバーライドする必要があるクラスメソッド