RxSwiftのオペレータdistinctUntilChangedに混乱した
combineLatest
で10個くらいCombineしていたので、ストリームに流れるイベントの量がバカにならなくなってきたので、各Variableでは値が変化したときだけイベントが流れるようにしたかった。
オペレータを探すときは、まず下記記事を読むことが多かった。今回はここのなかのdistinctUntilChanged
がかなり近い!となった。
本当に過去に流れたことのある値はもう流れなくなるのかが少し疑問だったので、公式も見ることに。
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
こちらが正しかったみたい。結論としては、distinct
とdistinctUntilChanged
は違うし、RxSwiftにはそもそもdistinct
はなさそう。
結果的には欲しい機能が元々用意されていて助かりましたという話でした。