//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. 46.Scrapy框架结构

    Scrapy的介绍:Scrapy是基于Twisted的异步处理框架,是纯python语言实现的爬虫框架,特点是架构清晰,模块间耦合度低.扩展性强较为灵活. 框架结构如图所示: Engine:引擎,处理 ...

  2. python函数作用域,嵌套函数,闭包

    函数作用域                                                                                                ...

  3. linux创建快捷方式ln命令

    创建快捷方式命令 ln -s 源文件 目标目录 //目标目录可以是完整路径,也可以是当前目录下的路径 ln 源文件 目标目录 在桌面上添加一个,创建一个文件夹(这里是work)的快捷方式 //源 cd ...

  4. ViewParent 和 ViewManager

    ViewGroup 继承了 View  实现了两个接口  ViewParent 和 ViewManager 接口 ViewParent:定义了成为一个View的parent的一些“职能”,当paren ...

  5. Spark 基础之SQL 快速上手

    知识点 SQL 基本概念 SQL Context 的生成和使用 1.6 版本新API:Datasets 常用 Spark SQL 数学和统计函数 SQL 语句 Spark DataFrame 文件保存 ...

  6. redis、mysql、mongdb的比较

    特点: 1-1 MySQL:1. 使用c和c++编写,并使用了多种编译器进行测试,保证源代码的可移植性2. 支持多种操作系统3. 为多种编程语言提供可API4. 支持多线程,充分利用CPU资源优化的S ...

  7. mybatis中查询使用#{}和${}的区别

    ${}中的变量什么值,就会简单的替代变量,不会做处理 比如delete * from tb_label where name=${labelname} 如果labelname的值是 something ...

  8. vue 根据接口返回的状态码判断用户登录状态并跳转登录页,登录后回到上一个页面(http拦截器)

    背景:后台接口返回code==501表示用户是未登录状态,需要登录才可访问: 通过http拦截做路由跳转 第一步:src目录下新建http.js文件,内容如下: import Axios from ' ...

  9. python基础 ---- 使用pyCharm 调试

    debug -- 为了分析程序的异常 单步调试 1.设置断点 2.debug.启动  3.监控变量

  10. 742. Closest Leaf in a Binary Tree查找最近的叶子节点

    [抄题]: Given a binary tree where every node has a unique value, and a target key k, find the value of ...