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
原创粉丝点击