Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ReactiveSwift从数组中发射元素,元素之间存在延迟_Swift_Reactive Programming_Reactive Cocoa_Reactive Swift - Fatal编程技术网

ReactiveSwift从数组中发射元素,元素之间存在延迟

ReactiveSwift从数组中发射元素,元素之间存在延迟,swift,reactive-programming,reactive-cocoa,reactive-swift,Swift,Reactive Programming,Reactive Cocoa,Reactive Swift,假设我有一个元素数组[1,2,3],延迟5秒 我希望在发射的当前元素和下一个元素之间暂停发射阵列的每个元素 例如: 输出: [00:00] -- 1 [00:05] -- 2 [00:10] -- 3 我已尝试执行以下操作: import ReactiveSwift 让startTime=DispatchTime.now().UptimeAnoSeconds 设arrayProperty=MutableProperty([1,2,3]) 设arraySignal=arrayProperty.

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

我希望在发射的当前元素和下一个元素之间暂停发射阵列的每个元素

例如:

输出:

[00:00] -- 1
[00:05] -- 2
[00:10] -- 3
我已尝试执行以下操作:

import ReactiveSwift
让startTime=DispatchTime.now().UptimeAnoSeconds
设arrayProperty=MutableProperty([1,2,3])
设arraySignal=arrayProperty.signal
阵列信号
.flatMap{$0}
.delay(2,开:QueueScheduler.main)
.observeValues{element in
让已用时间=DispatchTime.now().UptimeAnoSeconds
打印(\((已用-开始时间)/1\u 000\u 000\u 000)--\(元素)
}
但它只会延迟第一个元素的发射,并立即发射下一个元素


我找不到合适的运算符组合来使用,可能它们在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
展平策略相结合


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

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

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
展平策略相结合

(另外,请注意,您可以使用接受序列的信号生成器初始值设定项)