在RxSwift

时间:2017-08-25 14:06:09

标签: ios swift reactive-programming rx-swift

使用RxSwift,假设我有一个包含可观察整数

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

和A

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

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

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

1 个答案:

答案 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 } }