转换操作

转换可观察队列发出的Next事件里元素的操作

map

将转换闭包应用于可观察序列发出的元素,并返回已转换元素的一个新的可观察序列。

let disposeBag = DisposeBag()
Observable.of(1, 2, 3)
    .map { $0 * $0 }
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

flatMap and flatMapLatest

还记得之前的switchLatestflatMapLatest就是mapswitchLatest的组合,flatMap就是把Latest去掉。
官方解释是这样的:将Observable队列发出的元素转换成一个新的可观察队列,并将两者的输出组合成一个新的可观察队列,意思就是说会监听原队列,也会监听你闭包中转换过的队列。flatMapLatest不同的就是会监听最近的队列。(队列被改掉了)

let disposeBag = DisposeBag()

struct Player {
    var score: Variable<Int>
}

let 👦🏻 = Player(score: Variable(80))
let 👧🏼 = Player(score: Variable(90))

let player = Variable(👦🏻)

player.asObservable()
    .flatMap { $0.score.asObservable() } // Change flatMap to flatMapLatest and observe change in printed output
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

👦🏻.score.value = 85  // 会有响应

player.value = 👧🏼    // 这边也会有响应  监听了两个组合队列

👦🏻.score.value = 95 // Will be printed when using flatMap, but will not be printed when using flatMapLatest

👧🏼.score.value = 100

scan

以初始值开始,然后将一个累加器闭包应用于可观察序列所发射的每个元素,并将每个中间结果作为一个元素可观察序列返回。看例子

let disposeBag = DisposeBag()

Observable.of(10, 100, 1000)
    .scan(1) { aggregateValue, newValue in    // aggregateValue 之前返回的值
        aggregateValue + newValue
    }
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)    //  11,111,1111

过滤和条件操作

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 上一篇文章我们学习了创建类操作符,本篇我们将一起来学习RxJava转换类操作符。所谓转换,就是将事件序列中的...
    SherlockXu8013阅读 1,474评论 0 3
  • 刚刚开通了微信公众号:BaronTalk,之前专栏上的文章也陆续完成了搬迁。后续会持续保质保量的输出,觉得我的文章...
    张磊BARON阅读 10,474评论 11 32
  • RxSwift中最重要的一类操作符,叫做Transform operators它们用来把一个Observable中...
    AKyS佐毅阅读 629评论 0 1
  • 前篇文章我们介绍了一下基本的概念,现在我们聊一聊RxJava中的操作符,Rxjava中的操作符主要分为三类 转换操...
    人失格阅读 749评论 0 2
  • buffer操作符 buffer操作符周期性地收集源Observable产生的结果到列表中,并把这个列表提交给订阅...
    rkua阅读 229评论 0 0