我有一个SignalProducer producer异步发送Ints的。我可以将这些值与
producer.scan(0, +)
假设我想将总和重置为0如果它是> 10并且 1 秒内没有发送其他值。我的第一次尝试是这样的:
producer
.scan(0, +)
.flatMap(.latest) { n -> SignalProducer<Int, NoError> in
if n <= 10 {
return SignalProducer(value: n)
} else {
return SignalProducer.merge([
SignalProducer(value: n),
SignalProducer(value: 0).delay(1, on: QueueScheduler.main)
])
}
}
虽然这会正确发送0,但它不会重置 中的状态scan。即,一系列9, 8, long pause, 7发送9, 17, 0, 24。
有没有办法以正确重置状态的方式结合这两个概念?