假设我们有 InvoiceDataModel 数组
private let invoices Variable<[InvoiceDataModel]> = Variable([])
class InvoiceDataModel {
let id: Variable<Int>
var entity: Variable<InvoiceDto>
var isSelected: Variable<Bool>
}
点击复选框时,我正在更改 isSelected 的值。 我想要实现的是对 isSelect 更改使用react:
- 计算所选项目的总量(每个实体都有
var amount: Double
) - 检测集合中的所有项目是否都被选中
是否有可能观察整个数组并对元素变化的单个属性使用react? 不确定我应该如何实现这一目标。
可能我处理这个案例的方法是完全错误的。但是我不确定我应该如何以不同的方式在这里操作。
最佳答案
entity
和 isSelected
变量需要是 let 而不是 vars。
这是我想出的解决方案:
let selectedsAndAmounts = invoices
.asObservable()
.flatMapLatest {
Observable.combineLatest($0.map {
Observable.combineLatest($0.isSelected.asObservable(), Observable.just($0.amount)) { (isSelected: $0, amount: $1) }
})
}
let allSelected = selectedsAndAmounts
.map { $0.map { $0.isSelected } }
.map { $0.contains(false) == false }
let amountOfSelected = selectedsAndAmounts
.map { $0.map { $0.isSelected ? $0.amount : 0 } }
.map { $0.reduce(0, +) }
此解决方案(selectedsAndAmounts
observable)中的大部分复杂性来自于必须将 observables 解包在 observables 中。如果您可以稍微分解一下,或者从 InvoiceDataModel 中删除变量,那就更好了。
关于ios - RxSwift 观察数组变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51177561/