ポジティブ丸メガネ

3年目エンジニアです。

RxSwiftのオペレータdistinctUntilChangedに混乱した

combineLatestで10個くらいCombineしていたので、ストリームに流れるイベントの量がバカにならなくなってきたので、各Variableでは値が変化したときだけイベントが流れるようにしたかった。

オペレータを探すときは、まず下記記事を読むことが多かった。今回はここのなかのdistinctUntilChangedがかなり近い!となった。

qiita.com

本当に過去に流れたことのある値はもう流れなくなるのかが少し疑問だったので、公式も見ることに。

ReactiveX - Distinct operator

The Distinct operator filters an Observable by only allowing items through that have not already been emitted.

んー確かに流れなさそうな感じ。でも一旦実装してみることにした。

すると、普通に0--1--0の0が流れてる!おや??となってよく見ると、

RxMarbles: Interactive diagrams of Rx Observables

こちらが正しかったみたい。結論としては、distinctdistinctUntilChangedは違うし、RxSwiftにはそもそもdistinctはなさそう。

結果的には欲しい機能が元々用意されていて助かりましたという話でした。