RxSwiftでリアクティブにインターバルを変更できるタイマーを作る
タイトルの通りです。
以下の記事が参考になりました。
RxSwiftでリアクティブにインターバル間隔を変えるintervalを作る方法 #rxSwift
コードは以下のようになります。
func createAdjustableTimer(interval: Observable<RxTimeInterval>) -> Observable<RxTimeInterval> { return Observable.create { observer in var intervalDisposer: Disposable? return interval.subscribeNext { newInterval in intervalDisposer?.dispose() intervalDisposer = Observable<Int> .interval(newInterval, scheduler: MainScheduler.instance) .subscribeNext { count in observer.onNext(newInterval) } } } }
上の例ではインターバルを表す型として RxTimeInterval
を使っていますが、RxTimeInterval
= NSTimeInterval
= Double
なので、実際はどれでもOKです。
また、最初の値を送り出すまでの時間を変えたい場合は interval
の代わりに timer
を使えばよいです。
extension Observable where Element : SignedIntegerType { public class func timer(dueTime: RxSwift.RxTimeInterval, period: RxSwift.RxTimeInterval, scheduler: SchedulerType) -> RxSwift.Observable<Element> }