RxSwiftで一定時間ごとに何らかの処理を行う
お久しぶりです。今回はRxSwiftを用いて一定時間ごとに処理をするというコードを書いてみましたので、自分のメモ用に残しておきます。
ViewModel
import UIKit import RxSwift import RxCocoa final class hogeViewModel { private let bag = DisposeBag() let startTimer = PublishSubject<Void>() let stopTimer = PublishSubject<Void>() let timer$: Observable<Int> init() { timer$ = Observable .of( startTimer.map { true }, stopTimer.map { false } ) .merge() .flatMapLatest { starts -> Observable<Int> in return starts ? Observable<Int>.interval(3.0, scheduler: MainScheduler.instance) : .empty() } .startWith(0) .share(replay: 1) } }
ViewController
import UIKit import RxSwift import RxCocoa final class hogeViewController: UIViewController { private let bag = DisposeBag() fileprivate private(set) var vm = hogeViewModel() override func viewDidLoad() { super.viewDidLoad() vm .timer$ .subscribe(onNext: { [weak self] _ in guard let wself = self else { return } // 一定時間毎にしたい処理 }) .disposed(by: bag) } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) vm.startTimer.onNext(()) } override func viewDidDisappear(_ animated: Bool) { vm.stopTimer.onNext(()) }
まとめ
特に大した事はないですがこんな感じです!
簡単に説明させてもらうと、boolを使ってtrueならObservable
最近はRxSwiftをゴリゴリ使って開発しているので、これからもRxSwiftについての記事を色々かけたら良いなと思っています。笑
今回の記事はちょっと適当気味ですいません。。笑
どっかのタイミングでWebApiClientかライブラリを作れたら良いな〜