`RxSwift` 的倒数计时器
Posted
技术标签:
【中文标题】`RxSwift` 的倒数计时器【英文标题】:countdown timer by `RxSwift` 【发布时间】:2019-09-22 08:01:51 【问题描述】:我需要一个带有RxSwift
的三十秒计时器。
这是一个重复的问题,但问题没有明确的答案
【问题讨论】:
信息不足。 【参考方案1】:现有答案的更好方法。
let countDown = 15 // 15 seconds
Observable<Int>.timer(.seconds(0), period: .seconds(1), scheduler: MainScheduler.instance)
.take(countDown+1)
.subscribe(onNext: timePassed in
let count = self.countDown - timePassed
print(count)
, onCompleted:
print("count down complete")
)
【讨论】:
为什么要在take()
+1?
@Skoua 用于完成包含 0 的可观察对象。【参考方案2】:
在我看来,这是一个更清洁的解决方案(Swift 5.3)。 onNext
闭包接收剩余时间,因此无需执行计算。这也使得使用takeUntil
运算符在值等于0
时终止订阅变得更加容易。
let countdown = 30
Observable<Int>.interval(.seconds(1), scheduler: MainScheduler.instance)
.map countdown - $0
.takeUntil(.inclusive, predicate: $0 == 0 )
.subscribe(onNext: value in
print(value)
, onCompleted:
print("completed")
).disposed(by: disposeBag)
【讨论】:
【参考方案3】:使用 5.0 版本的 RxSwift 你可以做到:
Observable<Int>.interval(.seconds(30), scheduler: MainScheduler.instance).bind timePassed in
.disposed(by: yourDisposeBag)
【讨论】:
以上是关于`RxSwift` 的倒数计时器的主要内容,如果未能解决你的问题,请参考以下文章