List
と呼ばれる整数配列から作成されたビューがdata
あり、バインディングを使用してデータをビューに渡します。配列withAnimation
に要素を追加するときに使用しています。data
以下に示すように のプロパティ ラッパーが である場合、data
要素@State
を追加するときにアニメーションが正しく再生されます。
struct MyApp: App {
@State var data: [Int] = Array(1...5)
var body: some Scene {
WindowGroup {
ContentView(data: $data)
}
}
}
ただし、data
配列を に準拠するクラスに配置するObservableObject
と、要素を追加するときにアニメーションがまったく再生されません。
class MyData: ObservableObject {
@Published var data: [Int] = Array(1...5)
}
struct MyApp: App {
@ObservedObject var data: MyData = MyData()
var body: some Scene {
WindowGroup {
ContentView(data: $data.data)
}
}
}
質問
- 私のコードは正しいですか?それともSwiftUIのバグですか?
- 2 番目の状況では、を使用して配列に追加するときにアニメーションを正しく表示するにはどうすればよい
ObservableObject
ですか?
ContentView.swift
struct ContentView: View {
@Binding var data: [Int]
var body: some View {
List {
Button {
withAnimation {
data.append(data.count + 1)
}
} label: {
Text("Append an Item")
}
ForEach(data, id: \.self) { number in
Text(String(number))
}
}
}
}