我有一个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 的 bug?
- 在第二种情况下,如何在使用附加到数组时正确显示动画
ObservableObject
?
内容视图.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))
}
}
}
}