RxSwift学习笔记8:filter/distinctUntilChanged/single/elementAt/ignoreElements/take/takeLast/skip/sample/debounce
//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的更多相关文章
- JAVA并发设计模式学习笔记(二)—— Single Threaded Execution Pattern
注:本文的主要参考资料为结城浩所著<JAVA多线程设计模式>. 单线程执行模式(Single Threaded Execution Pattern)是最简单的多线程设计模式,几乎所有其他的 ...
- ASP.NET MVC5学习笔记之Filter提供体系
前面我们介绍了Filter的基本使用,但各种Filter要在合适的时机运行起来,需要预先准备好,现在看看ASP.NET MVC框架是怎么做的. 一.Filter集合 在ControlerActionI ...
- ASP.NET MVC5学习笔记之Filter基本介绍
Filter是ASP.NET MVC框架提供的基于AOP(面向方面)设计,提供在Action执行前后做一些非业务逻辑通用处理,如用户验证,缓存等.现在来看看Filter相关的一些类型信息. 一.基本类 ...
- RxSwift学习笔记7:buffer/window/map/flatMap/flatMapLatest/flatMapFirst/concatMap/scan/groupBy
1.buffer的基本使用 let publishSubject = PublishSubject<String>() //buffer 方法作用是缓冲组合,第一个参数是缓冲时间,第二个参 ...
- RxSwift学习笔记5:Binder
使用 Binder 创建观察者 //Observable序列(每隔1秒钟发出一个索引数) let scheduleObservable = Observable<Int>.interval ...
- RxSwift学习笔记2:Observable/生命周期/Event/oneNext/onError/onCompleted/
Observable 是 Rx 的根基 官网:http://reactivex.io/ github地址:https://github.com/ReactiveX/RxSwift Observabl ...
- RxSwift学习笔记1:RxSwift的编程风格
第一天:简单体验与RxSwift的编程风格 import UIKit//导入Rx相关框架 import RxSwift import RxCocoa struct Music { let name:S ...
- Angular 学习笔记——ng-repeat&filter
<!DOCTYPE html> <html lang="en" ng-app="myApp"> <head> <met ...
- RxSwift学习笔记10:startWith/merge/zip/combineLatest/withLatestFrom/switchLatest
//startWith //该方法会在 Observable 序列开始之前插入一些事件元素.即发出事件消息之前,会先发出这些预先插入的事件消息 Observable.of(1,2,3) .startW ...
随机推荐
- cat查阅文件技巧
一.打印除匹配行之外的其它行,使用-v 打印除$和#的注释行:cat file| grep -v ^$ | grep -v ^#
- Hive 任务优化 tips
1. 集群任务队列: 一般有 root.default, root.online, root.offline, root.spark-thiftserver Hue提交的任务一般默认在 defau ...
- hadoop 二次排序的思考
name sorce jx 10 gj 15 jx 20 gj 30 1. 二次排序 key如何定义 2. grouping 是不是一定要实现,不实现可以吗? 3. 二次排序的本质是什么 4. 如果以 ...
- python至winreg模块
_winreg模块在python3中已经改名了 https://blog.csdn.net/zhangxiaoyang0/article/details/72236305?fps=1&loca ...
- Resttemplate中设置超时时长方法
为了满足调用需求,需要在使用Resttemplate发送请求时,修改超时时长,网上给出了相关修改方法,代码如下: HttpComponentsClientHttpRequestFactory rf = ...
- 一些值得收藏的MySQL知识链接
https://yq.aliyun.com/articles/5533(死锁分析的很好的一篇文章) http://hedengcheng.com/?spm=5176.100239.blogcont55 ...
- Hibernate 再接触 事务隔离机制
事务:要么都要完成,一个不完成就要回滚. ACID 原子性 一致性 独立性 持久性 第一类丢失更新 第一类丢失更新 脏读(读了另外一个事务没有提交的数据) 不可重复读(在同一个事务里,对数据库里的值前 ...
- Unity之AssetBundle打包
AssetBundle Resources:表示U3D自动将资源打成一个AssetBundle包,所有放在Resources下的文件夹都会打成一个AssetBundle包,资源非常大,Resource ...
- linux上安装字体
安装字体命令: yum install wqy-microhei-fonts wqy-zenhei-fonts 安装完字体的存放目录:/usr/share/fonts 默认会在fonts目录下 ...
- Python中使用%还是format来格式化字符串?
Python中应该使用%还是format来格式化字符串? %还是format Python中格式化字符串目前有两种阵营:%和format,我们应该选择哪种呢? 自从Python2.6引入了form ...