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))
}
}
}
}
我读过很多关于自动更新 ForEach
或 List
的答案,但是 none 使用字典,每个键下都存储了一组自定义对象。更糟糕的是,我正在从 UserDefaults
绘制 couponDict
。我怎样才能使 List
或 ForEach
自动更新?
尝试这样的事情:
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))
}
}
}
}
我有一个带有自定义数组的字典 类,定义如下:
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))
}
}
}
}
我读过很多关于自动更新 ForEach
或 List
的答案,但是 none 使用字典,每个键下都存储了一组自定义对象。更糟糕的是,我正在从 UserDefaults
绘制 couponDict
。我怎样才能使 List
或 ForEach
自动更新?
尝试这样的事情:
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))
}
}
}
}