如何在 SwiftUI 中更新 ObservableObject 数组中的状态

问题描述 投票:0回答:1

我有一个 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()]
            }
        }
    }
}
swift swiftui
1个回答
0
投票

您可以尝试不同的方法,使用

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()]
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.