RxSwift (5) 条件运算符
来源:互联网 发布:软件外包行业利润率 编辑:程序博客网 时间:2024/06/13 11:44
filter
将信号元素 筛选 符合条件的 继续发送,不符合的舍弃
func rx_filter(){ let disposBag = DisposeBag() Observable.from(["美腿","丝袜","超短裙"]) .filter{x in x=="美腿"} .subscribe{print($0)} .addDisposableTo(disposBag) print("------------------------------") Observable.of("萝莉","御姐","萌萌哒") .scan("I Like Play", accumulator: {(last,current) in last+current}) .filter{ $0 == "I Like Play萝莉御姐"} .subscribe{print($0)} .addDisposableTo(disposBag) }打印结果next(美腿)completed------------------------------next(I Like Play萝莉御姐)completed
distinctUntilChanged
舍弃连续并且重复的信号
func rx_distinctUntilChanged(){ let disposBag = DisposeBag() Observable.of("a","b","b","c","b","b","d","a") .distinctUntilChanged() .subscribe{print($0)} .addDisposableTo(disposBag) }打印结果next(a)next(b)next(c)next(b)next(d)next(a)completed
elementAt
等同于 数组的 objectAt,取第几次发出的信号
func rx_elementAt(){ let disposeBag = DisposeBag() Observable.of("释放","洪荒","之力") .elementAt(2) .subscribe{print($0)} .addDisposableTo(disposeBag) }next(之力)completed
single
有条件:筛选条件,如果有多个满足条件的元素,满足条件的第一个元素发送,然后发送error;无条件:发送第一个元素
func rx_single(){ let disposeBag = DisposeBag() print("---------缺省条件就发出第一个元素-----------") // 缺省条件就发出第一个元素 Observable.of("1", "2", "3", "4", "5", "6") .single() .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) print("---------发送符合条件的元素-----------") Observable.of("1", "2", "3", "4", "5", "6") .single { $0 == "4" } .subscribe { print($0) } .disposed(by: disposeBag) print("---------有多个符合条件的元素-----------") Observable.of("1", "2", "3", "4", "5", "6") .single { $0 == "2" } .subscribe { print($0) } .disposed(by: disposeBag) print("---------没有符合条件的元素-----------") Observable.of("1", "2", "3", "4", "5", "6") .single { $0 == "7" } .subscribe { print($0) } .disposed(by: disposeBag) }打印结果---------缺省条件就发出第一个元素-----------1---------发送符合条件的元素-----------next(4)completed---------有多个符合条件的元素-----------next(2)error(Sequence contains more than one element.)---------没有符合条件的元素-----------error(Sequence doesn't contain any elements.)
take
从序列开头的元素 ,发出指定数量的元素,就是发送几次
func rx_take(){ let disposeBag = DisposeBag() Observable.of("a", "b", "c", "d", "e", "f") .take(4) .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) }打印结果abcd
takeLast
发送 倒数 指定数量的元素,先进先出
func rx_takeLast(){ let disposeBag = DisposeBag() Observable.of("a", "b", "c", "d", "e", "f") .takeLast(4) .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) }打印结果cdef
takeWhile
从序列开头筛选 满足条件的信号发送,只要不满足,回收序列
func rx_takeWhile(){ let disposeBag = DisposeBag() print("--------开头不满足退出无打印----------") Observable.of("猪", "牛", "过膝袜", "绝对领域", "马", "二次元") .takeWhile{x in x.characters.count>1} .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) print("--------开始满足条件----------") Observable.of(1, 2, 3, 4, 5, 6) .takeWhile { $0 < 4 } .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) }--------开头不满足退出无打印------------------开始满足条件----------123
takeUntil
本序列a 被另一个序列b关闭,当b开始发送信号的时候
func rx_takeUntil(){let disposeBag = DisposeBag() let aSequence = PublishSubject<String>() let bSequence = PublishSubject<String>() sourceSequence .takeUntil(referenceSequence) .subscribe { print($0) } .disposed(by: disposeBag) sourceSequence.onNext("1") sourceSequence.onNext("2") sourceSequence.onNext("3") referenceSequence.onNext("0") sourceSequence.onNext("4") sourceSequence.onNext("5") sourceSequence.onNext("6") }next(1)next(2)next(3)completed
skip
从序列开头 跳过指定数量的元素
func rx_skip() { let disposeBag = DisposeBag() Observable.of("1", "2", "3", "4", "5", "6") .skip(2) .subscribe(onNext: { print($0) }) .disposed(by: disposeBag)}3456
skipWhile
从序列开头,跳过 连续并且同时满足条件的信号,否则 发送信号
func rx_skipWhile(){ let disposeBag = DisposeBag() print("----开头连续并且满足----") Observable.of(1, 2, 3, 4, 5, 6) .skipWhile { $0 < 4 } .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) print("----开头不满足----") Observable.of(9, 2, 3, 4, 5, 6) .skipWhile { $0 < 4 } .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) print("----开头满足不连续----") Observable.of(1, 9, 3, 4, 5, 6) .skipWhile { $0 < 4 } .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) }----开头连续并且满足----456----开头不满足----923456----开头满足不连续----93456
skipWhileWithIndex
跟skipWhile 效果一样,只是多了一个参数 index下标,可以根据index下标来设置条件
func rx_skipWhileWithIndex(){ let disposeBag = DisposeBag() print("----开头连续并且满足----") Observable<Int>.create{observe in observe.onNext(1) observe.onNext(2) observe.onNext(3) observe.onNext(4) observe.onNext(5) observe.onNext(6) return Disposables.create() } .skipWhileWithIndex {element,index in element < 4 } .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) print("----开头不满足----") Observable.of(9, 2, 3, 4, 5, 6) .skipWhileWithIndex {element,index in element < 4 } .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) print("----开头满足不连续----") Observable.of(1, 9, 3, 4, 5, 6) .skipWhileWithIndex {element,index in element < 4 } .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) }----开头连续并且满足----456----开头不满足----923456----开头满足不连续----93456
skipUntil
屏蔽发射的信号,直到 参照的序列发出信号
func rx_skipUntil(){ let disposeBag = DisposeBag() let sourceSequence = PublishSubject<String>() let referenceSequence = PublishSubject<String>() sourceSequence .skipUntil(referenceSequence) .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) sourceSequence.onNext("1") sourceSequence.onNext("2") sourceSequence.onNext("3") referenceSequence.onNext("0") sourceSequence.onNext("4") sourceSequence.onNext("5") sourceSequence.onNext("6") }打印结果456
0 0
- RxSwift (5) 条件运算符
- JAVA学习(5)条件运算符
- ECMAScript 条件运算符
- 条件运算符?:
- 8.条件运算符
- C# 条件运算符
- 条件运算符
- Oracle 条件运算符
- 条件运算符
- 条件运算符
- 条件运算符
- 条件运算符嵌套
- 3.10、()条件运算符
- 条件运算符?
- 条件运算符嵌套
- 条件运算符
- 条件运算符?优先级
- python条件运算符
- 百度地图lib/libgnustl_shared.so" not found
- openmano的安装和使用
- 多按钮,点击当前按钮变色,点击其它按钮恢复
- python 存储bmp格式图片
- Unity学习之Deferred Light
- RxSwift (5) 条件运算符
- 第二章:在HTML中使用JavaScript
- Android的消息机制之ThreadLocal的工作原理
- Android开发笔记之代码动态生成图片状态选择器
- java内部类的价值
- 宾夕法尼亚大学Coursera运动规划公开课学习有感之三
- Xshell5下利用sftp上传下载传输文件
- window下虚拟摄像头VirtualCamera
- git clone 一些简单笔记