如何在执行其他事件时忽略事件?

时间:2016-02-12 19:11:38

标签: ios swift reactive-cocoa reactive-cocoa-3

让我们说你正在观察经常变化的财产,例如:当队列低于阈值时应该重新填充的队列吗?

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

1 个答案:

答案 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在这种特殊情况下更明确。