1.buffer的基本使用

     let publishSubject = PublishSubject<String>()
//buffer 方法作用是缓冲组合,第一个参数是缓冲时间,第二个参数是缓冲个数,第三个参数是线程。
//该方法简单来说就是缓存 Observable 中发出的新元素,当元素达到某个数量,或者经过了特定的时间,它就会将这个元素集合发送出来。 publishSubject.buffer(timeSpan: 1, count: 3, scheduler: MainScheduler.instance).subscribe {
print("\($0)")
}.disposed(by: disposeBag) publishSubject.onNext("a")
publishSubject.onNext("b")
publishSubject.onNext("c")
publishSubject.onNext("d")
publishSubject.onNext("e")
publishSubject.onNext("f") publishSubject.onNext("1")
publishSubject.onNext("2")
publishSubject.onNext("3") /*
=====count: 5
next(["a", "b", "c", "d", "e"])
next(["f", "1", "2", "3"])
next([])
next([])
........ =====count: 3
next(["a", "b", "c"])
next(["d", "e", "f"])
next(["1", "2", "3"])
next([])
next([])
........
*/

2.Window的基本使用

   // window基本介绍
// window 操作符和 buffer 十分相似。不过 buffer 是周期性的将缓存的元素集合发送出来,而 window 周期性的将元素集合以 Observable 的形态发送出来。
// 同时 buffer 要等到元素搜集完毕后,才会发出元素序列。而 window 可以实时发出元素序列。
publishSubject.window(timeSpan: 1, count: 3, scheduler: MainScheduler.instance)
.subscribe {[weak self] (observable) in
print(observable)
observable.element?.asObservable().subscribe{
print($0)
}.disposed(by: self!.disposeBag)
}.disposed(by: disposeBag) publishSubject.onNext("a")
publishSubject.onNext("b")
publishSubject.onNext("c") publishSubject.onNext("1")
publishSubject.onNext("2")
publishSubject.onNext("3") /*
next(RxSwift.AddRef<Swift.String>)
next(a)
next(b)
next(c)
completed
next(RxSwift.AddRef<Swift.String>)
next(1)
next(2)
next(3)
completed
next(RxSwift.AddRef<Swift.String>)
completed
next(RxSwift.AddRef<Swift.String>)
...
*/
        publishSubject.window(timeSpan: 1, count: 3, scheduler: MainScheduler.instance).subscribe( onNext: {[weak self] in
print($0)
$0.asObservable().subscribe(onNext:{
print($0)
}).disposed(by: self!.disposeBag)
}).disposed(by: disposeBag) publishSubject.onNext("a")
publishSubject.onNext("b")
publishSubject.onNext("c") publishSubject.onNext("1")
publishSubject.onNext("2")
publishSubject.onNext("3") /*
RxSwift.AddRef<Swift.String>
a
b
c
RxSwift.AddRef<Swift.String>
1
2
3
RxSwift.AddRef<Swift.String>
RxSwift.AddRef<Swift.String>
RxSwift.AddRef<Swift.String>
...
*/

3.map的基本使用:

//map:该操作符通过传入一个函数闭包把原来的 Observable 序列转变为一个新的 Observable 序列。
Observable.of(1,2,3).map { (int) -> Int in
return int*10
}.subscribe(onNext: {
print($0)
}).disposed(by: disposeBag)
//简写
Observable.of(1,2,3).map { $0*10 }
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag) print("===============")

4.flatmap基本使用:

//flatMap: ??
//map 在做转换的时候容易出现“升维”的情况。即转变之后,从一个序列变成了一个序列的序列。
//而 flatMap 操作符会对源 Observable 的每一个元素应用一个转换方法,将他们转换成 Observables。
//然后将这些 Observables 的元素合并之后再发送出来。即又将其 "拍扁"(降维)成一个 Observable 序列。
//这个操作符是非常有用的。比如当 Observable 的元素本生拥有其他的 Observable 时,我们可以将所有子 Observables 的元素发送出来。
let subject1 = BehaviorSubject(value: "A")
let subject2 = BehaviorSubject(value: "1")
let variable = Variable(subject1) variable.asObservable()
.flatMap { $0 }
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag) subject1.onNext("B")
variable.value = subject2
subject2.onNext("2")
subject1.onNext("C") /*
A
B
1
2
C
*/

5.flatMaplatest的基本使用:

//flatMapLatest: ??
//flatMapLatest 与 flatMap 的唯一区别是:flatMapLatest 只会接收最新的 value 事件。
variable.asObservable()
.flatMapLatest { $0 }
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag) subject1.onNext("B")
variable.value = subject2
subject2.onNext("2")
subject1.onNext("C") /*
A
B
1
2
*/

6.groupBy的基本使用:

//groupBy:
//groupBy 操作符将源 Observable 分解为多个子 Observable,然后将这些子 Observable 发送出来。
//也就是说该操作符会将元素通过某个键进行分组,然后将分组后的元素序列以 Observable 的形态发送出来。
Observable<Int>.of(0, 1, 2, 3, 4, 5)
.groupBy(keySelector: { (element) -> String in
return element % 2 == 0 ? "偶数" : "基数"
})
.subscribe { (event) in
switch event {
case .next(let group):
group.asObservable().subscribe({ (event) in
print("key:\(group.key) event:\(event)")
})
.disposed(by: self.disposeBag)
default:
print("")
}
}
.disposed(by: disposeBag) /*
key:偶数 event:next(0)
key:基数 event:next(1)
key:偶数 event:next(2)
key:基数 event:next(3)
key:偶数 event:next(4)
key:基数 event:next(5)
key:偶数 event:completed
key:基数 event:completed
*/

  

  

  

  

  

  

  

RxSwift学习笔记7:buffer/window/map/flatMap/flatMapLatest/flatMapFirst/concatMap/scan/groupBy的更多相关文章

  1. javaSE学习笔记(11)--- Map

    javaSE学习笔记(11)--- Map 1.Map集合 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Jav ...

  2. JavaScript学习笔记(六)——Map、Set与iterable

    在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...

  3. scala学习笔记(8): 列表的map,flatMap,zip和reduce

    map,flatMap,zip和reduce函数可以让我们更容易处理列表函数. 1 map函数map将一个函数应用于列表的每一个元素并且将其作为一个新的列表返回.我们可以这样对列表的元素进行平方: s ...

  4. Spark 学习笔记之 Streaming Window

    Streaming Window: 上图意思:每隔2秒统计前3秒的数据 slideDuration: 2 windowDuration: 3 例子: import org.apache.kafka.c ...

  5. Java学习笔记之:Java Map集合

    一.介绍 通常来说,Map是一个由键值对组成的数据结构,且在集合中每个键是唯一的. 二.笔记 /** * Map:接口. 不是collection的子类 key -value 键值对 key唯一不能重 ...

  6. RxSwift学习笔记5:Binder

    使用 Binder 创建观察者 //Observable序列(每隔1秒钟发出一个索引数) let scheduleObservable = Observable<Int>.interval ...

  7. RxSwift学习笔记4:disposeBag/scheduler/AnyObserver/Binder

    let disposeBg = DisposeBag() //直接在创建 //在 subscribe 方法中创建 let ofObserval = Observable.of("a" ...

  8. ES6学习笔记(10)----Set和Map数据结构

    参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ Set和Map数据结构 1.Set  基本用法    Set是一种新的数据结构,它的成员都是唯一 ...

  9. 加州大学伯克利分校Stat2.3x Inference 统计推断学习笔记: Section 5 Window to a Wider World

    Stat2.3x Inference(统计推断)课程由加州大学伯克利分校(University of California, Berkeley)于2014年在edX平台讲授. PDF笔记下载(Acad ...

随机推荐

  1. Http协议和Https协议的安全性问题

    https://www.cnblogs.com/intsmaze/p/6009648.html https://blog.csdn.net/jeffleo/article/details/768630 ...

  2. IVideoWindow 在directshow采集链路中的使用

    dshow中一个完整采集链路一般如下: Capture Device----->SampleGraber ------>Render 如果只要采集原始数据可以不用渲染链路那就如下: Cap ...

  3. 部署一个基于python语言的web发布环境

    ---恢复内容开始--- 1) 一门面向对象的语言 2)拥有丰富的库 3)可移植性 4)免费.开源 5)简单易易学 可做软件开发.人工智能.web开发等等 部署流程: Cnetos7.5+Nginx+ ...

  4. json介绍和使用

    最近在开发时需要用到json,所以在各种寻找json相关的博客,恰巧在博客园里就有一篇写的很不错的,在这里推荐下:http://www.cnblogs.com/Truly/archive/2006/1 ...

  5. GIT TEAMWORK

    Learn GIT TEAMWORK generalizations Congratulations, you now know enough to start collaborating on Gi ...

  6. 转 cxgrid属性说明

    TCXGRID控件:属性:ActiveLevel: 当前层BorderStyle: 窗口风格Color: 颜色FocusedView: 当前View;Font: 字体LevelTabs: 类似Page ...

  7. 高性能迷你React框架anujs1.1.0发布

    本版本对setState与forceUpdate内部依赖的setStateImpl进行了重构,性能稳定在60pfs之上.并且将组件实例的所有内部方法与属性都改成以___开头. https://gith ...

  8. 云笔记项目-网页端debug功能学习

    在做云笔记项目的过程中,除了服务端在eclipse中debug调试代码外,有时候需要在浏览器端也需要进行debug调试,刘老师举了一个冒泡排序算法的dubug例子,进行了讲解. 首先上浏览器端测试代码 ...

  9. mongodb异常恢复

    构造mongdb异常 启动mongodb,bash mongodb.sh #!/bin/bash pid_file=/var/run/mongodb/mongod.pid pid_dir=/var/r ...

  10. c# devexpress 多文档界面

    学习记录 https://blog.csdn.net/qq_25473787/article/details/81208894?utm_source=blogxgwz0