LoginSignup
6
7

More than 5 years have passed since last update.

RxSwiftでイベントを定期的にまとめる

Posted at

ユースケース

連打するアプリがあったとして、連打数を毎回サーバーに送ると死ぬので5秒に一回だけ送信したい。とか

コード

struct TapEvent {
  var createdAt = Date()
}

var tapEventBuffer = PublishSubject<TapEvent>()

tapEventBuffer.buffer(timeSpan: 5.0, count: 10, scheduler: MainScheduler.instance)
              .filter({ $0.count > 0 }).subscribe(onNext: { (events) in
      print(events.count)
}).addDisposableTo(rx_disposeBag)

func tap() {
  tapEventBuffer.on(.next(TapEvent()))
}

解説

var tapEventBuffer = PublishSubject<TapEvent>()

タップイベントを受け付けるところ

buffer(timeSpan: 5.0, count: 10, scheduler: MainScheduler.instance)

  • timeSpan: 何秒ごとにイベントをまとめるのか
  • count: このカウント数を超えるとまとめられる
  • scheduler: よくわからない、どのスレッドの流れを見るかとかかな

filter({ $0.count > 0 })

5秒毎に空のイベントが来ちゃうのでフィルタする

tapEventBuffer.on(.next(TapEvent()))

タップイベントを送る


これってcount無限とかないのかな

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7