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 ...
随机推荐
- JVM内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)
JVM区域总体分两类,heap区和非heap区.heap区又分为: Eden Space(伊甸园). Survivor Space(幸存者区). Old Gen(老年代). 非heap区又分: Cod ...
- 关于java字节码框架ASM的学习
一.什么是ASM ASM是一个java字节码操纵框架,它能被用来动态生成类或者增强既有类的功能.ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为 ...
- DateTimeOffset DateTime
DateTime只保存两部分信息:Ticks和KindTicks 一个Tick是100纳秒(1万Tick等于1毫秒)Ticks记录了从1/1/0001 12:00 AM到现在经过了多少100纳秒.Ki ...
- Linux环境变量设置/etc/profile、/etc/bashrc、~/.profile、~/.bashrc区别
登入系统读取步骤: 当登入系统时候获得一个shell进程时,其读取环境设定档有三步 : 1.首先读入的是全局环境变量设定档/etc/profile,然后根据其内容读取额外的设定的文档,如 /etc/p ...
- 一直觉得用java很不顺心
一直觉得用java很不顺心,今儿想明白一个事情.如果把汇编比作石器时代,c作为冷兵器时代,c++作为工业革命之后的热兵器及机械化时代,而c#之类则进入了现代科学世界,至于go,python之流,大概可 ...
- ArcGIS自定义工具箱-字段合并
ArcGIS自定义工具箱-字段合并 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:用指定字符合并两个字段 用例:湖南/长沙=>湖南省长沙市 数据源: 使 ...
- javascript函数嵌套时arguments的问题
疑问: var funtest = function () { var fun = function (val, val2) { alert(arguments.length); //此处答案? 有些 ...
- DOM 节点node
DOM可以将任何HTML或XML文档描绘成一个有多层节点构成的结构,即在HTML中所有内容都是节点.文档节点是每个文档的根节点,文档节点有一个子节点,称为文档元素.每个文档只能有一个文档元素.在HTM ...
- mysql修改密码方法
1. 修改密码有三种方法:1.1 ---->用mysqladmin修改密码格式:mysqladmin -u用户名 -p旧密码 password 新密码 例子:# mysqladmin -uroo ...
- 单点登录(SSO)解决方案之 CAS 入门案例
单点登录: 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. ...