gpt4 book ai didi

swift - 使用 rxSwift 的简单计时器

转载 作者:IT王子 更新时间:2023-10-29 05:26:04 27 4
gpt4 key购买 nike

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

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

        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 但我不能暂停它......我试图过滤事件但计数显然继续增长......

谁能帮帮我?谢谢!

最佳答案

一个小技巧:

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)

关于swift - 使用 rxSwift 的简单计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41184162/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com