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> }