RxSwift学习笔记9:amb/tabkeWhile/tabkeUntil/skipWhile/skipUntil
//amb基本介绍
//当传入多个 Observables 到 amb 操作符时,它将取第一个发出元素或产生事件的 Observable,然后只发出它的元素。
//并忽略掉其他的 Observables。 let psubject0 = PublishSubject<Int>()
let psubject1 = PublishSubject<Int>()
let psubject2 = PublishSubject<Int>() psubject0.amb(psubject1).amb(psubject2).subscribe(onNext: {print($0)}).disposed(by: disposeBag) psubject0.onNext(1)
psubject1.onNext(10)
psubject2.onNext(100) psubject0.onNext(2)
psubject1.onNext(20)
psubject2.onNext(200)
/*
1
2
*/ print("\n")
//tabkeWhile:该方法依次判断 Observable 序列的每一个值是否满足给定的条件。 当第一个不满足条件的值出现时,它便自动完成。
Observable.of(1,2,3,4,5).takeWhile({$0<4}).subscribe(onNext: {print($0)}).disposed(by: disposeBag) print("\n")
//除了订阅源 Observable 外,通过 takeUntil 方法我们还可以监视另外一个 Observable, 即 notifier。
//如果 notifier 发出值或 complete 通知,那么源 Observable 便自动完成,停止发送事件。
psubject1.takeUntil(psubject2).subscribe ( onNext:{print($0)}).disposed(by: disposeBag)
psubject1.onNext(1)
psubject1.onNext(2)
psubject1.onNext(3)
//停止接收消息
psubject2.onNext(999)
psubject1.onNext(4)
psubject1.onNext(5)
psubject1.onNext(6)
/*
1
2
3
*/ print("\n")
//skipWhile:
//该方法用于跳过前面所有满足条件的事件。
//一旦遇到不满足条件的事件,之后就不会再跳过了。
Observable.of(1,2,3,4,5).skipWhile({$0<4}).subscribe(onNext:{print($0)}).disposed(by: disposeBag)
/*
4
5
*/ print("\n")
//skipUntil:
//同上面的 takeUntil 一样,skipUntil 除了订阅源 Observable 外,通过 skipUntil 方法我们还可以监视另外一个 Observable, 即 notifier 。
//与 takeUntil 相反的是。源 Observable 序列事件默认会一直跳过,直到 notifier 发出值或 complete 通知。
psubject1.skipUntil(psubject2).subscribe(onNext:{print($0)}).disposed(by: disposeBag)
psubject1.onNext(1)
psubject1.onNext(2)
psubject1.onNext(3)
//停止接收消息
psubject2.onNext(999)
psubject1.onNext(4)
psubject1.onNext(5)
psubject1.onNext(6)
/*
4
5
6
*/
RxSwift学习笔记9:amb/tabkeWhile/tabkeUntil/skipWhile/skipUntil的更多相关文章
- 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 ...
- RxSwift学习笔记10:startWith/merge/zip/combineLatest/withLatestFrom/switchLatest
//startWith //该方法会在 Observable 序列开始之前插入一些事件元素.即发出事件消息之前,会先发出这些预先插入的事件消息 Observable.of(1,2,3) .startW ...
- 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 { (even ...
- RxSwift学习笔记6:Subjects/PublishSubject/BehaviorSubject/ReplaySubject/Variable
// 从前面的几篇文章可以发现,当我们创建一个 Observable 的时候就要预先将要发出的数据都准备好,等到有人订阅它时再将数据通过 Event 发出去. // 但有时我们希望 Observabl ...
- RxSwift学习笔记4:disposeBag/scheduler/AnyObserver/Binder
let disposeBg = DisposeBag() //直接在创建 //在 subscribe 方法中创建 let ofObserval = Observable.of("a" ...
- RxSwift学习笔记3:生命周期/订阅
有了 Observable,我们还要使用 subscribe() 方法来订阅它,接收它发出的 Event. let observal = Observable.of("a",&qu ...
随机推荐
- kettle实现同构单表增量同步
job如下: 如下转换:获取区服列表,将id列表保存到结果(内存) job: 同构数据库单表抽取(每个输入执行一次) 同构数据库单表抽取(job) 的具体实现如下: 转换:获取数据库连接ID 从结果获 ...
- Asp.Net+JQuery.Ajax之$.post
段时间有点跑偏,经过米老师和师傅的耐心指导,终于认识到自己的问题,现在回归常规路线,继续B/S的学习. 经过近半个月的熏陶,对JQuery慢慢的有了亲切感.当时我采访过一清,问他看完JQuery视频有 ...
- 同步对象(同步条件Event)
event = threading.Event() #创建同步对象 event.wait() #同步对象等待状态 event.set() #同步对象设置Trueevent.clear() ...
- source tree图谱
参考: https://www.jianshu.com/p/0e64ad60899e
- [PHP]误读支付宝接口可能引发的乌龙
------------------------------------------------------------------------------------ 之所以发现这个坑,源起项目中的 ...
- Vue.js连接后台数据jsp页面  ̄▽ ̄
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- 《DOM Scripting》学习笔记-——第三章 DOM
<Dom Scripting>学习笔记 第三章 DOM 本章内容: 1.节点的概念. 2.四个DOM方法:getElementById, getElementsByTagName, get ...
- Python设计模式 - 基础 - 七大基本原则
提倡使用设计模式,主要出发点就是实现代码复用,增加代码的扩展性和可维护性.如何设计出简洁.易懂.灵活.优美的代码结构的确是一门学问,透彻理解并践行如下七大原则通常都能取得基本满意的结果: - 单一职责 ...
- 134. Gas Station加油站
[抄题]: There are N gas stations along a circular route, where the amount of gas at station i is gas[i ...
- adc指令
adc是带进位加法指令,它利用了CF位上记录的进位值. 指令格式: adc 操作对象1,操作对象2 功能:操作对象1 = 操作对象1 + 操作对象2 + CF 例如指令 adc ax,bx实现的功能 ...