過濾和條件操作

從源可觀察序列中選擇性地發(fā)射元素的操作。

filter

僅從符合指定條件的可觀察序列中發(fā)出這些元素。

let disposeBag = DisposeBag()

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

distinctUntilChanged

抑制可觀察序列發(fā)出的序列重復(fù)元素。

let disposeBag = DisposeBag()

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

elementAt

僅在可觀察序列中發(fā)出的所有元素的指定索引中釋放元素。

let disposeBag = DisposeBag()

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

single

只發(fā)出可觀察序列發(fā)出的第一個元素(或滿足條件的第一個元素)。如果可觀察序列不是恰好發(fā)射一個元素,(多個滿足條件的)則拋出一個錯誤。

let disposeBag = DisposeBag()

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

加條件

let disposeBag = DisposeBag()

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

Observable.of("??", "??", "??", "??", "??", "??")
    .single { $0 == "??" }
    .subscribe { print($0) }
    .disposed(by: disposeBag)     // next(??) error(Sequence contains more than one element.)

Observable.of("??", "??", "??", "??", "??", "??")
    .single { $0 == "??" }
    .subscribe { print($0) }
    .disposed(by: disposeBag)  //  error(Sequence doesn't contain any elements.)

take

僅從可觀察序列的開頭發(fā)出指定數(shù)量的元素

let disposeBag = DisposeBag()

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

takeLast

僅從可觀察序列的結(jié)尾發(fā)出指定數(shù)量的元素。

let disposeBag = DisposeBag()

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

takeWhile

只要指定的條件求值為true,則從可觀察序列的開頭發(fā)出元素。

let disposeBag = DisposeBag()

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

takeUntil

從源可觀察序列中釋放元素,直到引用可觀察序列發(fā)出元素結(jié)束(發(fā)照發(fā),有人來了就不發(fā)了)

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("??")   // next(??)  next(??)  next(??)  completed

skip

禁止從可觀察序列的開頭釋放指定數(shù)量的元素。

let disposeBag = DisposeBag()

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

shipWhile

禁止從符合指定條件的可觀察序列的開頭發(fā)出元素。

let disposeBag = DisposeBag()

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

skipWhileWithIndex

禁止從符合指定條件的可觀察序列的開頭發(fā)出元素,并發(fā)出剩余的元素。閉包可用通過每個元素的索引。

let disposeBag = DisposeBag()

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

skipUntil

禁止從源可觀察序列中釋放元素,直到引用可觀察序列發(fā)出元素。

let disposeBag = DisposeBag()

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

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

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

referenceSequence.onNext("??")

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

算術(shù)和集合操作

最后編輯于
?著作權(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)容