RxSwift 中可观察集合中的平面映射可观察属性

Flat mapping observable properties in a observable collection in RxSwift

使用 RxSwift,假设我有一个 class A,其中包含一个整数

class A: {
    let count: Observable<Int>
}

以及 A

对象的可观察集合
let data: Observable<[A]>

我想定义一个 sum: Observable<Int>,它将是 data 中所有对象的所有 count 的总和。每当 data 可观察集合发生变化或任何 count 属性 发生变化时,sum 也应该发生变化。

如何实现?我尝试了一些 flapMapmap 组合,但只有当 sum 仅在 data 更新时更新时才得到解决方案,忽略 count 更改。

let sum = data.flatMap { Observable.from([=10=]).flatMap { [=10=].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([=11=]).flatMap { [=11=].count }.reduce(0, accumulator: +) })

更新二:

    let counts: Observable<[Int]> = data.flatMap { Observable.combineLatest([=12=].map { [=12=].count }) }
    let sum: Observable<Int> = counts.map { [=12=].reduce(0) { [=12=] +  } }