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. e.getMessage 为空NULL

    在日常代码中免不了要try catch 切忌用try catch 去try 整个方法. 在对象操作之前尽量写上if 空判断. 反例: public void send(){ try{ 代码1:获取对象 ...

  2. 【亲测】解决虚拟机CentOS7联网ping不通相关问题(通俗易懂)

    对于是使用windows操作系统的小伙伴来说(mac用户忽略),要学习一些技术可能需要使用Linux系统,自然就需要使用虚拟机安装Linux,当然现在很多主流的学习网站上的教程都会提供老师配置好的虚拟 ...

  3. python读取excel表

    from xlrd import open_workbookimport re #创建一个用于读取sheet的生成器,依次生成每行数据,row_count 用于指定读取多少行, col_count 指 ...

  4. win7、centos7 双系统安装总结

    centos7安装过程 问题:TroubleShooting选项进入图形化界面安装才成功. win7恢复引导区 问题:安装完Centos后,win7的引导区不见了 具体恢复过程:http://www. ...

  5. c# post 接收传来的文件

    private void UploadFile() { // //......其他代码 // HttpFileCollection files = HttpContext.Current.Reques ...

  6. 2017-11-03 Fr OCT 球体积的导数为球表面积

    上学期学立体几何时注意到这一点.去问林老师,没听明白(写完笔记后发现林老师讲得是对的,惭愧).今天下午考历史的时候突然想起来. 除了球体积的导数为球表面积外,还注意到圆体积的导数为圆周长.今天中午看w ...

  7. 基于maven javaweb编程缺少java源文件

    前提:基于maven的javaweb的开发环境,可参考 link 一. https://blog.csdn.net/ldlly0505/article/details/79674826 1.在sour ...

  8. 吴裕雄 python深度学习与实践(8)

    import cv2 import numpy as np img = cv2.imread("G:\\MyLearning\\TensorFlow_deep_learn\\data\\le ...

  9. eclipse修改工作目录颜色

    转载请注明本地址,http://blog.csdn.net/u013173247/article/details/41676495 经常用Eclipse的朋友都应该清楚,Eclipse的白背景不知道晃 ...

  10. 解决yum安装ftp提示仓库 的 GPG 密钥已安装,但是不适用于此软件包。

    遇到的问题: 在linux系统使用yum install ftp安装ftp,报以下错误 warning: rpmts_HdrFromFdno: Header V3 RSA/SHA1 Signature ...