【发布时间】:2019-04-26 15:20:24
【问题描述】:
我想测试每 6 秒触发一次信号。我的代码如下所示:
class DataStore {
var clinics: Int { return clinicsSignal.lastDataFired ?? 0 }
let clinicsSignal = Signal<Int>(retainLastData: true)
var timer: Timer?
init() {
}
func load() {
self.clinicsSignal.fire(0)
DispatchQueue.main.async { [weak self] in
self!.timer?.invalidate()
self!.timer = Timer.scheduledTimer(withTimeInterval: 6.0, repeats: true) { [weak self] _ in
self?.clinicsSignal.fire(9)
}
}
}
}
我的测试代码如下所示:
func testRefresh() {
var dataStore: DataStore = DataStore()
dataStore.clinicsSignal.subscribeOnce(with: self) {
print("clinics signal = \($0)")
dataStore.clinicsSignal.fire(0)
}
dataStore.load()
sleep(30)
print("clinics3 = \(dataStore.clinics)")
}
当我睡 30 秒时,计时器代码直到 30 秒后才会再次运行,因此它不会像预期的那样每 6 秒运行一次。关于如何在计时器中测试该代码的任何想法都会在特定时间受到打击?谢谢。
【问题讨论】:
-
为什么你的班级是
final? -
@RicoCrescenzio 会有什么不同吗?!
-
@RicoCrescenzio 好问题。我只是把它拿出来了。我不知道为什么会这样。
标签: swift asynchronous time timer