RxSwift - 理論篇05 - Filtering and Conditional Operators

1、filter

(1)Definition

Emits only those elements from an Observable sequence that meet the specified 
condition. 
只發出那些滿足指定條件的事件(elements),將不符合要求的事件過濾掉。

(2)Diagram

filter.png
只會將 大于10 的 elements 發出。

(3)Code

// MARK: - filter
func demoForFilter() {
    
    let disposeBag = DisposeBag()
    
    let observable = Observable.of(
        "??", "??", "??",
        "??", "??", "??",
        "??", "??", "??")
    
    observable
        .filter {
            $0 == "??"
        }
        .subscribe(onNext: { print($0) })
        .addDisposableTo(disposeBag)
}

(4)Result

filter 執行結果.png

2、distinctUntilChanged

(1)Definition

Suppresses sequential duplicate elements emitted by an Observable sequence.
禁止序列發出重復的 element。即:
當下一個事件與前一個事件是不同事件的時候,才會將其發出。

(2)Diagram

distinctUntilChanged.png
如果后一個 element 跟前一個 element 重復了,就不會發出后一個 element。

(3)Code

// MARK: - distinctUntilChanged
func demoForDistinctUntilChanged() {
    
    let disposeBag = DisposeBag()
    
    let observable = Observable.of("??", "??", "??", "??", "??", "??", "??")
    
    observable
        .distinctUntilChanged()
        .subscribe(onNext: { print($0) })
        .addDisposableTo(disposeBag)
}

(4)Result

distinctUntilChanged 執行結果.png

3、elementAt

(1)Definition

Emits only the element at the specified index of all elements emitted by an 
Observable sequence.
只會發送指定索引的事件(element)

(2)Diagram

elementAt.png

(3)Code

// MARK: - elementAt
func demoForElementAt() {
    
    let disposeBag = DisposeBag()
    
    let observable = Observable.of("??", "??", "??", "??", "??", "??")
    
    observable
        .elementAt(3)
        .subscribe(onNext: { print($0) })
        .addDisposableTo(disposeBag)
}

(4)Result

elementAt 執行結果.png

4、single

(1)Definition

找出在sequence只發出一次的事件,如果超過一個就會發出error錯誤

(2)Diagram

(3)Code & Result

// MARK: - single
func demoForSingle() {
    
    let disposeBag = DisposeBag()
    
    let observable = Observable.of("??", "??", "??", "??", "??", "??")
    
    observable
        .single()
        .subscribe(onNext: { print($0) })
        .addDisposableTo(disposeBag)
}

執行結果如下:
??
Received unhandled error: /Users/XDLee/Desktop/RxSwift/RxSwift_Transform_Operator/RxSwift_Transform_Operator/ViewController.swift:187:demoForSingle() -> 
Sequence contains more than one element.
Observable.of("??", "??", "??", "??", "??", "??")
    .single { $0 == "??" }
    .subscribe { print($0) }
    .addDisposableTo(disposeBag)

執行結果如下:
next(??)
completed
Observable.of("??", "??", "??", "??", "??", "??")
        .single { $0 == "??" }
        .subscribe { print($0) }
        .addDisposableTo(disposeBag)

執行結果如下:
next(??)
error(Sequence contains more than one element.)
Observable.of("??", "??", "??", "??", "??", "??")
            .single { $0 == "??" }
            .subscribe { print($0) }
            .addDisposableTo(disposeBag)

執行結果如下:
error(Sequence contains more than one element.)
error(Sequence doesn't contain any elements.)

5、take

(1)Definition

Emits only the specified number of elements from the beginning of an Observable 
sequence. 
只發出前幾個事件(elements)

(2)Diagram

take.png
表示只發送前2個事件。

(3)Code

// MARK: - take
func demoForTake() {
    
    let disposeBag = DisposeBag()
    
    let observable = Observable.of("??", "??", "??", "??", "??", "??")
    
    observable
        .take(3)
        .subscribe { print($0) }
        .addDisposableTo(disposeBag)
}

(4)Result

take 執行結果.png

6、takeLast

(1)Definition

表示只發出后幾個事件(elements)

(2)Diagram

takeLast.png

(3)Code

// MARK: - takeLast
func demoForTakeLast() {
    
    let disposeBag = DisposeBag()
    
    let observable = Observable.of("??", "??", "??", "??", "??", "??")
    
    observable
        .takeLast(3)
        .subscribe { print($0) }
        .addDisposableTo(disposeBag)
}

(4)Result

takeLast 執行結果.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 去廈門的那幾天,天氣算不得好,時而陽光明媚,時而綿綿細雨。 我們坐的是高鐵,從深圳北到廈門北,三個多小時的車程。我...
    三月的檸子閱讀 444評論 0 2
  • 之前寫了一篇文章,叫《價值百萬的職場標簽,你被貼了嗎》,后來有好些朋友問,對于好的標簽如何經營,怎么改變一些已經形...
    張二白很白閱讀 3,562評論 1 5
  • 抬頭模版 名稱 子名稱 時間地點 起草人 最后修改人 權限申明,公開,內部,機密 版本 公司信息,聯系方式 純文字...
    凌峰閱讀 431評論 0 0
  • 痛苦的時候我清醒著做著快樂的夢 快樂的時候我沉醉著醒著的真實也有了夢 做夢的時候我聽不到所以我望著你 夢醒的時候我...
    易似非閱讀 232評論 0 1