Q&A
実現したいこと
@StateとForEachを使ったViewの再描画をしたい
前提
SwiftUIで、ForEachを使ったViewで丸数字を指定の個数だけ並べて表示させたあと、個数を変化させて表示を再描画させたいのですが、うまくいきません。
例えば、あらかじめ@State var number = 4として表示させると、
個数の指定は4と表示され、意図通り数字が4個並びます。(①②③④)
ボタンで、1個数字を増やして5個にしようとすると、
個数の指定は5と再描画されるのに、数字の並びは4個のままです。(①②③④)
数字の並びも5個としたい(①②③④⑤)のですが、どうすればいいでしょうか?
個数指定の数字も、数字の並びも同じImageViewの中で記述しているので、ImageViewが@Stateの数字が変わったことで再描画されているはずなのですが...
どなたかご教示いただけるとありがたいです。
発生している問題・エラーメッセージ
エラーメッセージはありません。
該当のソースコード
SwiftUI
1import SwiftUI 2 3struct ContentView: View { 4 @State var number = 4 5 6 var body: some View { 7 VStack { 8 ImageView(number: number).padding() 9 Button("個数 +1") { if number < 6 { number = number + 1 }} 10 Button("個数 -1") { if number > 1 { number = number - 1 }} 11 } 12 } 13} 14 15struct ImageView: View { 16 var number: Int 17 18 var body: some View { 19 VStack { 20 Text("個数の指定: \(number)").padding() 21 HStack { 22 ForEach (0..<number) { i in 23 Image(systemName: "\(i+1).circle").font(.title) 24 } 25 } 26 } 27 } 28} 29 30struct ContentView_Previews: PreviewProvider { 31 static var previews: some View { 32 ContentView() 33 } 34}
試したこと
UUID()をうまく使うと解決すると書いてあるものもありましたが、理解できませんでした。
補足情報(FW/ツールのバージョンなど)
Xcode 14.2
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2023/02/24 10:21