前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RxSwift 系列(四) -- Transforming Operators

RxSwift 系列(四) -- Transforming Operators

作者头像
Scott_Mr
发布2018-05-16 16:06:33
9960
发布2018-05-16 16:06:33
举报
文章被收录于专栏:Scott_Mr 个人专栏

前言

本篇文章将要学习RxSwift中四种转换操作符:

  • map
  • flatMap
  • flatMapLatest
  • scan

map

通过使用一个闭包函数将原来的Observable序列转换为一个新的Observable序列。

图1
图1
代码语言:javascript
复制
let disposeBag = DisposeBag()
    
    Observable.of(1,2,3).map({return 10 * $0}).subscribe({print($0)}).disposed(by: disposeBag)

打印结果:

代码语言:javascript
复制
next(10)
next(20)
next(30)
completed

flatMap

将一个Observable序列转换为另一个Observable序列,并且合并两个Observable序列。会按时间顺序接收两个序列发出的元素。

代码语言:javascript
复制
let disposeBag = DisposeBag()
    
struct Player {
    var score:Variable<Int>
}
    
let man = Player(score: Variable(80))
let women = Player(score: Variable(90))
    
let player = Variable(man)
    player.asObservable().flatMap({$0.score.asObservable()}).subscribe(onNext: {print($0)}).disposed(by: disposeBag)
    
man.score.value = 85
player.value = women
man.score.value = 95
women.score.value = 100

打印结果:

代码语言:javascript
复制
80
85
90
95
100

flatMapLatest

flatMapLatestflatMap一样,也是将一个序列转换为另一个序列,flatMapLatest只会从最近的序列中发出事件。

flatMapLatest = map + switchLatest

  • 疑问:感觉和switchLatest没什么区别啊。(有哪位大佬帮忙解答一下么
代码语言:javascript
复制
let disposeBag = DisposeBag()
    
struct Player {
    var score:Variable<Int>
}
    
let man = Player(score: Variable(80))
let women = Player(score: Variable(90))
    
let player = Variable(man)
    player.asObservable().flatMapLatest({$0.score.asObservable()}).subscribe(onNext: {print($0)}).disposed(by: disposeBag)
    
man.score.value = 85
player.value = women
man.score.value = 95
women.score.value = 100

打印结果:

代码语言:javascript
复制
80
85
90
100

scan

scan就是提供一个初始化值,然后使用计算闭包不断将前一个元素和后一个元素进行处理,并将处理结果作为单个元素的Observable序列返回。

代码语言:javascript
复制
let disposeBag = DisposeBag()
    
Observable.of(10, 100, 1000)
    .scan(2) { aggregateValue, newValue in
        aggregateValue + newValue
    }
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

打印结果:

代码语言:javascript
复制
12
112
1112

致谢

如果发现有错误的地方,欢迎评论,感谢!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-07-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • map
  • flatMap
  • flatMapLatest
  • scan
  • 致谢
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档