RxSwift ボタン連打防止
throttle
Operatorを用いると良い。
throttle
及び似たような機能のあるdebounce
についてはこちらを参照。
RxSwiftのDebounceとThrottle
throttle
はボタン連打防止、debounce
はいわゆるインクリメンタルサーチなどAPI呼びすぎ防止などで使える。
実際には以下のようなextensionを作ると便利である。
Reactive+Extenstions.swift
import RxCocoa
import RxSwift
public extension Reactive where Base: UIButton {
var throttledTap: ControlEvent<Void> {
return ControlEvent<Void>(events: tap
.throttle(.milliseconds(ContinuousTap.disableTapDuration), latest: false, scheduler: MainScheduler.instance))
}
}
public extension Reactive where Base: UIBarButtonItem {
var throttledTap: ControlEvent<()> {
return ControlEvent<()>(events: tap
.throttle(.milliseconds(ContinuousTap.disableTapDuration), latest: false, scheduler: MainScheduler.instance))
}
}
public extension Reactive where Base: UITableView {
var throttledItemSelected: ControlEvent<IndexPath> {
return ControlEvent<IndexPath>(events: itemSelected
.throttle(.milliseconds(ContinuousTap.disableTapDuration), latest: false, scheduler: MainScheduler.instance) )
}
}
public extension Reactive where Base: UICollectionView {
var throttledItemSelected: ControlEvent<IndexPath> {
return ControlEvent<IndexPath>(events: itemSelected
.throttle(.milliseconds(ContinuousTap.disableTapDuration), latest: false, scheduler: MainScheduler.instance) )
}
}
enum ContinuousTap {
/// Disable Tap Duration in Milliseconds
static let disableTapDuration: Int = 500
}
Author And Source
この問題について(RxSwift ボタン連打防止), 我々は、より多くの情報をここで見つけました https://qiita.com/satoru_pripara/items/ec32b659e38fa644f8a0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .