SwiftUI 如何使用带有自定义对象数组的 Dict 自动更新 ForEach

SwiftUI How to make ForEach with Dict with array of custom objects auto update

我有一个带有自定义数组的字典 类,定义如下:

var coupons: [String: [Coupon]]

然后我像这样将它们放入 ForEach 中:

List {
                        
        ForEach(keys, id: \.self) { key in
                Section(header: Text(key)) {
                    ForEach(couponDict[key] ?? [], id: \.id) { coupon in
                            Button(ifexpiredString(date: coupon.date)+coupon.data[1]) {
                                     let coupons = UserDefaults.standard.coupons
                                     let couponIndex = coupons.firstIndex(of: coupon)
                                     self.currentview = "Coupon"+String(couponIndex!)
                            }.foregroundColor(ifexpired(date: coupon.date) ? Color.gray : ifexpireing(date: coupon.date))
                   }
           }
     }
}

我读过很多关于自动更新 ForEachList 的答案,但是 none 使用字典,每个键下都存储了一组自定义对象。更糟糕的是,我正在从 UserDefaults 绘制 couponDict。我怎样才能使 ListForEach 自动更新?

尝试这样的事情:

List {
    ForEach(Array(coupons.keys), id: \.self) { key in 
    // or ForEach(coupons.keys.sorted(), id: \.self) { key in 
        Section(header: Text(key)) {
            ForEach(coupons[key] ?? [], id: \.id) { coupon in
                Button(ifexpiredString(date: coupon.date)+coupon.data[1]) {
                    let coupons = UserDefaults.standard.coupons
                    let couponIndex = coupons.firstIndex(of: coupon)
                    self.currentview = "Coupon"+String(couponIndex!)
                }.foregroundColor(ifexpired(date: coupon.date) ? Color.gray : ifexpireing(date: coupon.date))
            }
        }
    }
}