はじめに
どうも@kaneko77です。
RxSwiftのオペレータでdebounce
とthrottle
があります。
こちら初めて見る人は違いが分かりずらいと思います。
今回はその二つのオペレーターの違いについて共有していきます。
それでは行ってみよ〜
※参考にしたサイトはこちらです。
説明
debounce
まずdebounce
についての説明になります。
以下reactivexの引用です。
reactivex引用
http://reactivex.io/documentation/operators/debounce.html別のアイテムを発行せずに特定の期間が経過した場合にのみ、Observableからアイテムを発行します
このように
指定の期間の間、まとまったイベントは最新値のみ流れるようになっています。
指定の期間の最後のアイテムのみを流すということですね。
throttle
debounce
とは裏腹に連続したイベントは最初の
イベントだけ流してあとは指定期間の間無視します。
以下reactivexの引用です。
reactivex引用
http://reactivex.io/documentation/operators/debounce.html指定された期間の連続する時間枠の間にObservableによって発行された最初のアイテムのみを発行するObservableを返します。
実践
この説明だと「はにゃ?」って感じだと思いますので実際にコードや実行結果を織り交ぜながらやっていきます。
debounce
self.mainView.login.rx.tap.asDriver()
.debounce(.seconds(2))
.drive{ _ in
print("debounceボタンを押下した!!")
}
.disposed(by: disposeBeg)
throttle
self.mainView.login.rx.tap.asDriver()
.throttle(.seconds(2), latest: false)
.drive{ _ in
print("throttleボタンを押下した!!")
}
.disposed(by: disposeBeg)
比較
こちらのログの結果を見ていただければ今回の対象のオペレーター
が
どういう性質を持っているか分かると思います。
debounce
デバウンスは連続したイベントは最新値のみ取得するため、
最新値から2秒後に処理を実行させています。
throttle
スロットルは最初に値が流れたものを流し処理を実行してから2秒後にまたイベントが一つ流れるということになっています。
終わりに
今回はよく私自身どっちがどっちだっけ?と
なってしまうdebounce
とthrottle
の違いについて共有しました。
二つに共通して言えるのは 指定秒だけ一つのイベントしか流れない ということですね。
ここまで見ていただきありがとうございます。
少しでも皆さんのお役に立てればなと思います。