使用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
更改时,才会找到解决方案。
答案 0 :(得分:0)
let sum = data.flatMap { Observable.from($0).flatMap { $0.count }.reduce(0, accumulator: +) }
&#39;。降低()&#39;仅在完成时发出,因此它必须位于外部&#39; .flatMap()&#39;
更新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 } }