【发布时间】:2023-10-20 22:23:01
【问题描述】:
假设我的 SwiftUI 应用中有一个如下所示的数据模型:
class Tallies: Identifiable, ObservableObject {
let id = UUID()
@Published var count = 0
}
class GroupOfTallies: Identifiable, ObservableObject {
let id = UUID()
@Published var elements: [Tallies] = []
}
我想向GroupOfTallies 添加一个类似于以下内容的计算属性:
// Returns the sum of counts of all elements in the group
var cumulativeCount: Int {
return elements.reduce(0) { $0 + $1.count }
}
但是,我希望 SwiftUI 在 cumulativeCount 更改时更新视图。当elements 更改(数组获得或丢失元素)或任何包含的Tallies 对象的count 字段更改时,都会发生这种情况。
我已考虑将其表示为 AnyPublisher,但我认为我对 Combine 的掌握不够好,无法使其正常工作。 this answer 中提到了这一点,但从它创建的 AnyPublisher 是基于已发布的 Double 而不是已发布的 Array。如果我尝试在不修改的情况下使用相同的方法,cumulativeCount 只会在元素数组更改时更新,但不会在其中一个元素的 count 属性更改时更新。
【问题讨论】: