gpt4 book ai didi

swift - ReactiveSwift 从数组中发射元素,元素之间有延迟

转载 作者:行者123 更新时间:2023-11-28 10:37:59 26 4
gpt4 key购买 nike

假设我有一个元素数组 [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 展平策略相结合.

(另外,请注意,您可以使用带有序列的信号生成器初始化程序)

关于swift - ReactiveSwift 从数组中发射元素,元素之间有延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52371708/

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