//filter:该操作符就是用来过滤掉某些不符合要求的事件。
Observable.of(1,2,3,4,5,8).filter({
$0 % 2 == 0
}).subscribe { (event) in
print(event.element ?? "nil")
}.disposed(by: disposeBag)
/*
2
4
8
nil
*/ print("========================")
//distinctUntilChanged:该操作符用于过滤掉连续重复的事件。
Observable.of(1,2,2,3,4,4,4,6,6,7)
.distinctUntilChanged()
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag) /*
1
2
3
4
6
7
*/
print("========================")
// single:
// 限制只发送一次事件,或者满足条件的第一个事件。
// 如果存在有多个事件或者没有事件都会发出一个 error 事件。
// 如果只有一个事件,则不会发出 error 事件。 Observable.of(1,2,3,4,5,6).single()
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
/*
1
Unhandled error happened: Sequence contains more than one element.
subscription called from:
*/ Observable.of(1,2,3,4,5,6).single({$0%2 == 0})
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
/*
2
Unhandled error happened: Sequence contains more than one element.
subscription called from:
*/ print("========================")
//elementAt:该方法实现只处理在指定位置的事件。
Observable.of(1,2,3,4,5,6).elementAt(3)
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag) //0->1 3->4 //ignoreElements
//该操作符可以忽略掉所有的元素,只发出 error 或 completed 事件。
//如果我们并不关心 Observable 的任何元素,只想知道 Observable 在什么时候终止,那就可以使用 ignoreElements 操作符。
Observable.of(1,2,3,4,5,6).ignoreElements()
.subscribe({
print($0)
})
.disposed(by: disposeBag) //completed print("========================")
//take:该方法实现仅发送 Observable 序列中的前 n 个事件,在满足数量之后会自动 .completed。
Observable.of(1,2,3,4,5,6).take(2)
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
/*
1
2
*/
print("========================")
Observable.of(1,2,3,4,5,6).takeLast(2)
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag) /*
5
6
*/ print("========================")
//skip:该方法用于跳过源 Observable 序列发出的前 n 个事件。
Observable.of(1,2,3,4,5,6).skip(2)
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
/*
3
4
5
6
*/ print("========================")
//Sample:
//Sample 除了订阅源 Observable 外,还可以监视另外一个 Observable, 即 notifier 。
//每当收到 notifier 事件,就会从源序列取一个最新的事件并发送。而如果两次 notifier 事件之间没有源序列的事件,则不发送值。
let source = PublishSubject<Int>()
let notifier = PublishSubject<String>() source
.sample(notifier)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag) source.onNext(1) //让源序列接收接收消息
notifier.onNext("A") source.onNext(2) //让源序列接收接收消息
notifier.onNext("B")
notifier.onNext("C") source.onNext(3)
source.onNext(4) //让源序列接收接收消息
notifier.onNext("D") source.onNext(5) //让源序列接收接收消息
notifier.onCompleted()
/*
1
2
3
5
*/ print("========================")
//debounce
//debounce 操作符可以用来过滤掉高频产生的元素,它只会发出这种元素:该元素产生后,一段时间内没有新元素产生。
//换句话说就是,队列中的元素如果和下一个元素的间隔小于了指定的时间间隔,那么这个元素将被过滤掉。
//debounce 常用在用户输入的时候,不需要每个字母敲进去都发送一个事件,而是稍等一下取最后一个事件。 //定义好每个事件里的值以及发送的时间
let times = [
[ "value": 1, "time": 0.1 ],
[ "value": 2, "time": 1.1 ],
[ "value": 3, "time": 1.2 ],
[ "value": 4, "time": 1.2 ],
[ "value": 5, "time": 1.4 ],
[ "value": 6, "time": 2.1 ]
] //生成对应的 Observable 序列并订阅
Observable.from(times)
.flatMap { item in
return Observable.of(Int(item["value"]!))
.delaySubscription(Double(item["time"]!),
scheduler: MainScheduler.instance)
}
.debounce(0.5, scheduler: MainScheduler.instance) //只发出与下一个间隔超过0.5秒的元素
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
/*
1
5
6
*/

  

RxSwift学习笔记8:filter/distinctUntilChanged/single/elementAt/ignoreElements/take/takeLast/skip/sample/debounce的更多相关文章

  1. JAVA并发设计模式学习笔记(二)—— Single Threaded Execution Pattern

    注:本文的主要参考资料为结城浩所著<JAVA多线程设计模式>. 单线程执行模式(Single Threaded Execution Pattern)是最简单的多线程设计模式,几乎所有其他的 ...

  2. ASP.NET MVC5学习笔记之Filter提供体系

    前面我们介绍了Filter的基本使用,但各种Filter要在合适的时机运行起来,需要预先准备好,现在看看ASP.NET MVC框架是怎么做的. 一.Filter集合 在ControlerActionI ...

  3. ASP.NET MVC5学习笔记之Filter基本介绍

    Filter是ASP.NET MVC框架提供的基于AOP(面向方面)设计,提供在Action执行前后做一些非业务逻辑通用处理,如用户验证,缓存等.现在来看看Filter相关的一些类型信息. 一.基本类 ...

  4. RxSwift学习笔记7:buffer/window/map/flatMap/flatMapLatest/flatMapFirst/concatMap/scan/groupBy

    1.buffer的基本使用 let publishSubject = PublishSubject<String>() //buffer 方法作用是缓冲组合,第一个参数是缓冲时间,第二个参 ...

  5. RxSwift学习笔记5:Binder

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

  6. RxSwift学习笔记2:Observable/生命周期/Event/oneNext/onError/onCompleted/

     Observable 是 Rx 的根基 官网:http://reactivex.io/ github地址:https://github.com/ReactiveX/RxSwift Observabl ...

  7. RxSwift学习笔记1:RxSwift的编程风格

    第一天:简单体验与RxSwift的编程风格 import UIKit//导入Rx相关框架 import RxSwift import RxCocoa struct Music { let name:S ...

  8. Angular 学习笔记——ng-repeat&filter

    <!DOCTYPE html> <html lang="en" ng-app="myApp"> <head> <met ...

  9. RxSwift学习笔记10:startWith/merge/zip/combineLatest/withLatestFrom/switchLatest

    //startWith //该方法会在 Observable 序列开始之前插入一些事件元素.即发出事件消息之前,会先发出这些预先插入的事件消息 Observable.of(1,2,3) .startW ...

随机推荐

  1. 使用IntelliJ IDEA创建简单的Dubbo实例

    这个博客是在https://blog.csdn.net/Crazer_cy/article/details/80397649篇文章上的基础上,自己学习用的. Zookeeper为dubbo的注册中心, ...

  2. [UnityShader基础]03.透明度混合

    如果要渲染半透明物体,那么就需要用到透明度混合. 需要注意的有这几点: 1.设置标签:Tags { "Queue"="Transparent" "Ig ...

  3. 推特算法,分布式ID

    package casclient_demo1.util; import java.lang.management.ManagementFactory; import java.net.InetAdd ...

  4. LevelDB源码分析-Get

    Get LevelDB提供了Get接口用于给定key的查找: Status DBImpl::Get(const ReadOptions &options, const Slice &k ...

  5. [INet] WebSocket 数据收发的详细过程

    WebSocket 和 HTTP 相似,只是一个应用层协议,对下层透明,所以不涉及 TCP/IP. 由于浏览器支持了 WebSocket,所以在用 JS 写客户端的时候,是无需考虑数据的编码解码的. ...

  6. ps命令详解

    1.简介: ps 命令有两种不同的语法风格 —— BSD 与 UNIX 两种风格.新手常常对这两种形式产生误解,因此我们有必要在这里作一个简单的说明: ps aux 与 ps -aux 是不同的,例如 ...

  7. BuildTool

    (一)BuildTool是什么 BuildTool 构建工具  ,是一个把源代码生成可执行应用程序的过程自动化的程序(例如Android app生成apk).构建包括编译.连接跟把代码打包成可用的或可 ...

  8. Unity中的点击,长按,划动

    public void GetClickType() { if(Input.GetMouseButtonDown(0)) { if(isGetBeginPos) { beginPosition = I ...

  9. CSS3实现投影效果

    Webkit引擎定义了-webkit-box-reflect属性,该属性能够实现投影效果,具体语法如下: -webkit-box-reflect: <direction> <offs ...

  10. 《CSAPP》虚拟存储器

    虚拟存储器与物理存储器 虚拟存储器(VM)被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组.每一个字节都有一个唯一的虚拟地址,这个唯一的虚拟地址作为数组的索引.磁盘上的数组内容被缓存在主 ...