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. Android开发 assets目录

    Android资源文件分类: Android资源文件大致可以分为两种: 第一种是res目录下存放的可编译的资源文件: 这种资源文件系统会在R.Java里面自动生成该资源文件的ID,所以访问这种资源文件 ...

  2. VS2015+Opencv3.2配置(一次配好)

    对于 VS2015+QT5.8的配置我就不介绍了,由于我配置的比较早,具体有的东西忘掉了,大家可以参考下面这几篇文章. 留白留白留白留白留白(稍后补) 对于Opencv+VS的配置是我重点要说的内容. ...

  3. 修改java在进程中的映像名

    java小程序用java -jar xxx.jar  启动的进程映像名都是java.exe. 如果启动多个小程序就不好区分,导致监控程序无法定位到具体需要守护的小程序上. 解决办法: 在java安装目 ...

  4. Titanic缺失数值处理 & 存活率预测

    1.  kaggle泰坦尼克数据titanic完整下载,原作者良心分享 https://download.csdn.net/download/lansui7312/9936840 2. 缺失值处理 # ...

  5. txt,csv,json互相转化

    也没啥,记下来怕忘了.说明都在代码里面: 麻蛋,这个着色好难看 import csv import json #从txt变为csv student_txt=[]; with open("st ...

  6. Sqlite安装教程

    Sqlite下载页面:http://www.sqlite.org/download.html Windows安装 需要下载 sqlite-tools-win32-*.zip 和 sqlite-dll- ...

  7. opencv setTo()

    转载至 作者:跬步达千里 opencv的setTo函数是将图像设置为某个值; 例如: 1.有一个Mat src,想将他的值全部设置成0,则可以src.setTo(0) 2.setTo还有更为高级的用法 ...

  8. JAVA远程调试

    1.远程端启动必须添加jvm参数 -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=${debug_port} 其中de ...

  9. 348. Design Tic-Tac-Toe设计井字游戏

    [抄题]: Design a Tic-tac-toe game that is played between two players on a n x n grid. You may assume t ...

  10. js数组去除重复数据

    一个有重复数据的数组,准备一个空数组,遍历有重复数据的数组同时用indexOf对比那个空数组判断是否有一样的,不一样的push进去空数组 let arr = dataInfo.map(item =&g ...