タコさんブログ

プログラミングメモと小言

RxSwift 入門 その4

Filtering Observables

RxSwift 入門 その3 - タコさんブログ の続き。
今回は、RxSwiftプレイグラウンドの Filtering Observables の項。
この項では、ソースObservableから選択的にアイテム(イベント)を送信するオペレータに関して説明してある。

以下、プレイグラウンドで説明してあるFilteringに関するオペレータ。

  • filter
  • distinctUntilChanged
  • take

RxSwiftには、この他にも以下のオペレータが利用できる:

  • debounce
  • elementAt
  • ignoreElements
  • sample
  • skip
  • takeLast

filter

filterオペレータは、述語が真となるアイテムをObservableから送信する。

let stream = (1..<10).toObservable()
_ = stream
  .filter {
    $0 % 2 == 0  // 偶数をフィルタ
  }
  .subscribe {
    print($0)
  }

この出力は、

Next(2)
Next(4)
Next(6)
Next(8)
Completed

このマーブルダイアグラムは以下のように表せられる。

-1-2-3- ... -8-9|
↓ filter { x % 2 == 0 }
---2--- ... -8--|

distinctUntilChanged

distinctUntilChangedオペレータは、Observableによって送信される重複するアイテムを除去する。

let stream = [1, 2, 3, 1, 1, 4].toObservable()
_ = stream
  .distinctUntilChanged()
  .subscribe {
    print($0)
  }

この出力は、

Next(1)
Next(2)
Next(3)
Next(1)
Next(4)

このマーブルダイアグラムは以下のように表せられる。

-1-2-3-1-1-4|
↓ distinctUntilChanged
-1-2-3-1---4|

take

takeオペレータは、Observableによって送信される最初のn個のアイテムのみを送信する。

let stream = [1, 2, 3, 1, 1, 4].toObservable()
_ = stream
  .take(2)
  .subscribe {
    print($0)
  }

この出力は、

Next(1)
Next(2)
Completed

このマーブルダイアグラムは以下のように表せられる。

-1-2-3-1-1-4|
↓ take(2)
-1-2|

参考URL