ユースケース
連打するアプリがあったとして、連打数を毎回サーバーに送ると死ぬので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無限とかないのかな