让我们说你正在观察经常变化的财产,例如:当队列低于阈值时应该重新填充的队列吗?
queue.rac_valuesForKeyPath("count", observer: self)
.toSignalProducer()
.filter({ (queueCount: AnyObject?) -> Bool in
let newQueueCount = queueCount as! Int
return newQueueCount < 10
})
.on(next: { _ in
// Refilling the queue asynchronously and takes 10 seconds
self.refillQueue(withItemCount: 20)
})
.start()
当队列为空时,将触发下一个处理程序并填充队列。填充队列时,SignalProducer会发送一个新的下一个事件,因为count属性更改为1 - 另一个和另一个。但我不希望触发下一个处理程序。相反,我希望每当队列低于该阈值时触发一次。
我怎样才能以最好的方式做到这一点?有没有有用的事件流操作?有什么想法吗?
干杯,
了Gerardo
答案 0 :(得分:0)
我认为您可以在此使用word
运算符,因为它会为您提供当前值和之前的值:
combinePrevios
另一种方法是在原始代码中queue.rac_valuesForKeyPath("count", observer: self)
.toSignalProducer()
.combinePrevious(0)
.filter { (previous, current) -> Bool in
return previous >= 10 && current < 10
}
.on(next: { _ in
// Refilling the queue asynchronously and takes 10 seconds
self.refillQueue(withItemCount: 20)
})
.start()
之后添加skipRepeats()
,但我认为filter
在这种特殊情况下更明确。