【问题标题】:Simple timer with rxSwift带有 rxSwift 的简单计时器
【发布时间】:2017-05-02 05:40:34
【问题描述】:

我正在尝试使用 RxSwift 重现一个简单的计时器。

我有一个暂停/播放 button 仅适用于暂停和恢复。

        gameTimer = Observable<NSInteger>.interval(1, scheduler: MainScheduler.instance)
            .subscribeNext({ sec -> Void in
            print("\(sec) s")
        }).addDisposableTo(disposeBag!)


            pauseResumeButton.rx_tap
            .map{ !self.isRunning.value }
            .startWith(true)
            .bindTo( isRunning )
            .addDisposableTo(disposeBag!)

isRunning 显然是一个变量Bool>。 我可以停止计时器设置disposeBag = nil,但我无法暂停它....尝试过滤事件但计数显然继续增长...

谁能帮帮我?谢谢!

【问题讨论】:

    标签: swift timer rx-swift


    【解决方案1】:

    一个小技巧:

    class ViewController: UIViewController {
    
        let isRunning = Variable(true)
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            isRunning.asObservable()
                .debug("isRunning")
                .flatMapLatest {  isRunning in
                    isRunning ? Observable<Int>.interval(1, scheduler: MainScheduler.instance) : .empty()
                }
                .flatMapWithIndex { (int, index) in Observable.just(index) }
                .debug("timer")
                .subscribe()
                .addDisposableTo(disposeBag)
    
            navigationItem.rightBarButtonItem!.rx.tap
                .subscribe(onNext: { [unowned self] in
                    self.isRunning.value = !self.isRunning.value
                })
                .addDisposableTo(disposeBag)
    
        }
    }
    

    结果:

    2016-12-17 20:53:11.408: timer -> subscribed
    2016-12-17 20:53:11.414: isRunning -> subscribed
    2016-12-17 20:53:11.415: isRunning -> Event next(true)
    2016-12-17 20:53:12.503: timer -> Event next(0)
    2016-12-17 20:53:13.488: timer -> Event next(1)
    2016-12-17 20:53:14.488: timer -> Event next(2)
    2016-12-17 20:53:15.488: timer -> Event next(3)
    2016-12-17 20:53:16.154: isRunning -> Event next(false)
    2016-12-17 20:53:23.155: isRunning -> Event next(true)
    2016-12-17 20:53:24.223: timer -> Event next(4)
    2016-12-17 20:53:25.229: timer -> Event next(5)
    2016-12-17 20:53:26.228: timer -> Event next(6)
    2016-12-17 20:53:27.220: timer -> Event next(7)
    2016-12-17 20:53:28.225: timer -> Event next(8)
    2016-12-17 20:53:29.221: timer -> Event next(9)
    2016-12-17 20:53:29.971: isRunning -> Event next(false)
    

    【讨论】:

    • 哇。 debug 似乎是一个强大的实用功能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    相关资源
    最近更新 更多