【发布时间】:2019-09-22 08:01:51
【问题描述】:
我需要一个带有RxSwift 的三十秒计时器。
这是一个重复的问题,但问题没有明确的答案
【问题讨论】:
-
信息不足。
我需要一个带有RxSwift 的三十秒计时器。
这是一个重复的问题,但问题没有明确的答案
【问题讨论】:
现有答案的更好方法。
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?
在我看来,这是一个更清洁的解决方案(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)
【讨论】:
使用 5.0 版本的 RxSwift 你可以做到:
Observable<Int>.interval(.seconds(30), scheduler: MainScheduler.instance).bind { timePassed in
}.disposed(by: yourDisposeBag)
【讨论】: