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

标签 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变化。

最佳答案

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/

相关文章:

iphone - iOS 拨号助手自动将本地号码格式化为美国号码

ios - coredata - 将内容保存为 json 字符串或 nsdata

swift - 无法转换为带符号的 16 位数组

objective-c - 优胜美地工具栏样式

c# - 如何在 Rx.NET 中以正确的方式约束并发

ios - 无法在我的 iOS 应用程序上显示 Google 插页式广告

ios - 从 iOS 创建 Fusion Table

ios - 创建单元格时 TableViewCell 未解析的标识符

javascript - rxjs:使用流两次引用已完成上游的可观察对象

java - repeatWhen() 没有完成