七、過濾和條件操作-Filtering and Conditional Operators(Rx.playground翻譯)

注意:使用本例中的代碼首先應(yīng)該導(dǎo)入頭文件,代碼如下:

import RxSwift

Filtering and Conditional Operators

有選擇地從源Observable序列發(fā)散元素的操作。

filter

發(fā)散一個源Observable序列中滿足指定條件的那些元素。?了解更多

example("filter") {
    let disposeBag = DisposeBag()

    Observable.of(
        "??", "??", "??",
        "??", "??", "??",
        "??", "??", "??")
        .filter {
            $0 == "??"
        }
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)
}

Debug Area 輸出:
--- filter example ---
??
??
??


distinctUntilChanged

壓縮一個源Observable序列中發(fā)散的連續(xù)重復(fù)的元素。?了解更多

example("distinctUntilChanged") {
    let disposeBag = DisposeBag()

    Observable.of("??", "??", "??", "??", "??", "??", "??")
        .distinctUntilChanged()
        .subscribe(onNext:  { print($0) })
        .disposed(by: disposeBag)
}

Debug Area 輸出:
--- distinctUntilChanged example ---
??
??
??
??
??


elementAt

發(fā)散一個源Observable序列中指定索引的元素。?了解更多

example("elementAt") {
    let disposeBag = DisposeBag()

    Observable.of("??", "??", "??", "??", "??", "??")
        .elementAt(3)
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)
}

Debug Area 輸出:
--- elementAt example ---
??


single

發(fā)出一個源Observable序列中的第一個元素(或者滿足條件的第一個元素)。如果這個源Observable序列不能發(fā)出一個元素或者根據(jù)條件查找到兩個以上的元素將會?拋出一個錯誤。

example("single") {
    let disposeBag = DisposeBag()

    Observable.of("??", "??", "??", "??", "??", "??")
        .single()
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)
}

Debug Area 輸出:
--- single example ---
??

example("single with conditions") {
    let disposeBag = DisposeBag()

    Observable.of("??", "??", "??", "??", "??", "??")
        .single { $0 == "??"}
        .subscribe { print($0) }
        .disposed(by: disposeBag)

    Observable.of("??", "??", "??", "??", "??", "??")
        .single { $0 == "??"}
        .subscribe { print($0) }
        .disposed(by: disposeBag)

    Observable.of("??", "??", "??", "??", "??", "??")
        .single { $0 == "??"}
        .subscribe { print($0) }
        .disposed(by: disposeBag)
}

Debug Area 輸出:
--- single with conditions example ---
next(??)
completed
next(??)
error(Sequence contains more than one element.)
error(Sequence doesn't contain any elements.)


take

從一個源Observable序列的開始元素?發(fā)散指定數(shù)量的元素。?了解更多

example("take") {
    let disposeBag = DisposeBag()
    
    Observable.of("??", "??", "??", "??", "??", "??")
        .take(3)
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)
}

Debug Area 輸出:
--- take example ---
??
??
??


takeLast

從一個源Observable序列的結(jié)尾元素?發(fā)散指定數(shù)量的元素。?了解更多

example("takeLast") {
    let disposeBag = DisposeBag()
    
    Observable.of("??", "??", "??", "??", "??", "??")
        .takeLast(3)
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)
}

Debug Area 輸出:
--- takeLast example ---
??
??
??


takeWhile

發(fā)出一個源Observable序列中?的只要指定條件的值為true的元素。?了解更多

image

example("takeWhile") {
    let disposeBag = DisposeBag()

    Observable.of(1, 2, 3, 4, 5, 6)
    .takeWhile { $0 < 4 }
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
}

Debug Area 輸出:
--- takeWhile example ---
1
2
3


takeUntil

從一個源Observable序列中?發(fā)散元素直到一個參照Observable序列發(fā)出一個元素。?了解更多

example("takeUntil") {
    let disposeBag = DisposeBag()

    let sourceSequence = PublishSubject<String>()
    let referenceSequence = PublishSubject<String>()

    sourceSequence
        .takeUntil(referenceSequence)
        .subscribe { print($0) }
        .disposed(by: disposeBag)

    sourceSequence.onNext("??")
    sourceSequence.onNext("??")
    sourceSequence.onNext("??")

    referenceSequence.onNext("??")

    sourceSequence.onNext("??")
    sourceSequence.onNext("??")
    sourceSequence.onNext("??")
}

Debug Area 輸出:
--- takeUntil example ---
next(??)
next(??)
next(??)
completed


skip

從一個源Observable序列的開始發(fā)散元素,并且跳過指定數(shù)量的元素。了解更多

example("skipWhile") {
    let disposeBag = DisposeBag()

    Observable.of("??", "??", "??", "??", "??", "??")
        .skip(2)
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)
}

Debug Area 輸出:
--- skip example ---
??
??
??
??


skipWhile

從一個源Observable序列的開始發(fā)散元素,并且跳過滿足條件的元素。了解更多

example("skipWhile") {
    let disposeBag = DisposeBag()

    Observable.of(1, 2, 3, 4, 5, 6)
        .skipWhile { $0 < 4 }
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)
}

Debug Area 輸出:
--- skipWhile example ---
4
5
6


skipWhileWithIndex

從一個源Observable序列的開始發(fā)散元素,并且跳過滿足條件的索引的元素。這個閉包查詢了每個元素。

example("skipWhileWith") {
    let disposeBag = DisposeBag()

    Observable.of("??", "??", "??", "??", "??", "??")
        .skipWhileWithIndex { element, index in
            index < 3
        }
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)
}

Debug Area 輸出:
--- skipWhileWithIndex example ---
??
??
??


skipUntil

跳過一個源Observable序列發(fā)送的元素,直到一個參照Observable序列發(fā)出一個元素。了解更多

example("skipUntil") {
    let disposeBag = DisposeBag()

    let sourceSequence = PublishSubject<String>()
    let referenceSequence = PublishSubject<String>()

    sourceSequence
        .skipUntil(referenceSequence)
        .subscribe { print($0) }
        .disposed(by: disposeBag)

    sourceSequence.onNext("??")
    sourceSequence.onNext("??")
    sourceSequence.onNext("??")

    referenceSequence.onNext("??")

    sourceSequence.onNext("??")
    sourceSequence.onNext("??")
    sourceSequence.onNext("??")
}

Debug Area 輸出:
--- skipUntil example ---
??
??
??


下一篇: 八、??數(shù)學(xué)和?集合操作-Mathematical and Aggregate Operators(Rx.playground翻譯)?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容