加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

带rxSwift的简单计时器

发布时间:2020-12-14 05:31:57 所属栏目:百科 来源:网络整理
导读:我正在尝试使用Rx Swift重现一个简单的计时器. 我有一个暂停/播放按钮,只适用于暂停和恢复. gameTimer = ObservableNSInteger.interval(1,scheduler: MainScheduler.instance) .subscribeNext({ sec - Void in print("(sec) s") }).addDisposableTo(dispose
我正在尝试使用Rx Swift重现一个简单的计时器.

我有一个暂停/播放按钮,只适用于暂停和恢复.

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显然是一个变量.
我可以停止计时器设置disposeBag = nil但是我不能暂停它…. itried过滤事件但计数显然继续增长…

谁能帮我?谢谢!

一个小技巧:
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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读