使用 RxSwift,假设我有一个包含整数可观察值的 A 类
class A: {
let count: Observable<Int>
}
以及 A 的可观察对象集合
let data: Observable<[A]>
我想定义一个sum: Observable<Int>
这将是所有 count
的总和data
中的所有对象。每当data
可观察的集合更改或任何 count
属性更改 sum
也应该改变。
如何实现这一目标?我尝试了一些flapMap
和map
组合,但只有在 sum
时才得到解决方案仅当 data
时才会更新更新,忽略 count
变化。
最佳答案
let sum = data.flatMap { Observable.from($0).flatMap { $0.count }.reduce(0, accumulator: +) }
'.reduce()' 仅在完成时发出,因此它必须位于外部 '.flatMap()' 内部
更新1:
let sumSubject: BehaviorSubject<Observable<Int>> = BehaviorSubject.create(Observable.empty())
let sum = sumSubject.switchLatest()
// every time it has to be a new 'data' observable!
sumSubject.onNext(data.flatMap { Observable.from($0).flatMap { $0.count }.reduce(0, accumulator: +) })
更新2:
let counts: Observable<[Int]> = data.flatMap { Observable.combineLatest($0.map { $0.count }) }
let sum: Observable<Int> = counts.map { $0.reduce(0) { $0 + $1 } }
关于ios - RxSwift 中可观察集合中的平面映射可观察属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45883214/