我有一个 ObservableObjects 数组。我有一个按钮可以增加列表中每个对象的值属性。
我的问题是,当通过点击按钮更改已发布的属性时,UI 没有更新。如果我添加新项目,我会看到更新值发生变化。
点击按钮时如何更新 UI?
class Item: ObservableObject, Identifiable {
@Published var value: Int = 1
let id = UUID()
}
struct ContentView: View {
@State var items: [Item] = []
var body: some View {
List {
ForEach($items) { $item in
Button {
item.value += 1
} label: {
Text("\(item.value)")
}
}
Button("Add Item") {
items += [.init()]
}
}
}
}
您可以尝试不同的方法,使用
ObservableObject
对于具有 [Item]
结构数组的数据模型。
看看这个官方链接,它为您提供了一些如何在应用程序中管理数据的好示例:监控数据
示例代码:
class ItemsModel: ObservableObject {
@Published var items: [Item] = []
}
struct Item: Identifiable {
var value: Int = 1
let id = UUID()
}
struct ContentView: View {
@StateObject var dataModel = ItemsModel()
var body: some View {
List {
ForEach($dataModel.items) { $item in
Button {
item.value += 1
} label: {
Text("\(item.value)")
}
}
Button("Add Item") {
dataModel.items += [.init()]
}
}
}
}