ReactiveSwift 从数组中发出元素,元素之间有延迟



假设我有一个元素数组[1, 2, 3]5秒的延迟。

我想发出数组的每个元素,在发出的当前元素和下一个元素之间暂停。

例:

输出:

[00:00] -- 1
[00:05] -- 2
[00:10] -- 3

我尝试执行以下操作:

import ReactiveSwift
let startTime     = DispatchTime.now().uptimeNanoseconds
let arrayProperty = MutableProperty<[Int]>([1, 2, 3])
let arraySignal   = arrayProperty.signal
arraySignal
.flatMap { $0 }
.delay(2, on: QueueScheduler.main)
.observeValues { element in
let elapsed = DispatchTime.now().uptimeNanoseconds
print("((elapsed - startTime) / 1_000_000_000) -- (element)")
}

但它只会延迟第一个元素的发射,并立即发射下一个元素。

我找不到合适的运算符组合来使用,也许它们在 ReactiveSwift 框架中缺失,而且我是响应式编程的初学者,所以实现我自己的运算符太难了。

我没有机会尝试这段代码,但它应该是这样的:

SignalProducer([1, 2, 3])
.flatMap(.concat) { n in
return SignalProducer(value: n).delay(2, on: QueueScheduler.main)
}
.startWithValues { element in
let elapsed = DispatchTime.now().uptimeNanoseconds
print("((elapsed - startTime) / 1_000_000_000) -- (element)")
}

关键是使用flatMap为每个值创建一个新的信号生产者,您可以对其应用延迟,并将它们与.concat平展策略相结合。

(另请注意,您可以使用采用序列的信号生产者初始值设定项(

相关内容

  • 没有找到相关文章

最新更新