2016-08-24 45 views
1

我正在使用ReactiveCocoa 4實現搜索文本字段,並且希望在沒有文本輸入X次的時間後才能點擊搜索API。我之前通過取消先前的計劃並在textDidChange委託方法中引發了一個「executeSearch」選擇器來完成此操作。這可以確保每次輸入時,任何先前預定的「executeSearch」選擇器都將被取消,並且新的計劃將在X秒內觸發。ReactiveCocoa 4 - 延遲和過濾信號事件

我現在想要做同樣的行爲,但是從一個信號生產者綁定到我的輸入文本。我目前的實施很接近,但不一樣。此行爲僅將文本輸入事件限制爲每0.5秒觸發一次,而不是取消先前的事件。

searchTextInput.producer.delay(0.3, onScheduler: RACScheduler.currentScheduler()) 
         .throttle(0.5, onScheduler: RACScheduler.currentScheduler()) 
         .producer.startWithNext({ [unowned self] searchText in 
          self.executeSearch(searchText) 
         }) 

我很難篩選ReactiveCocoa 4文檔來知道我應該使用哪些信號功能!謝謝!

回答

1

您需要使用DateSchedulerType。例如:

textField.rac_textSignal() 
      .toSignalProducer() 
      .map { $0 as! String } 
      .flatMapError { _ in SignalProducer<String, NoError>.empty } 
      .throttle(2.0, onScheduler: QueueScheduler.mainQueueScheduler) 
      .filter { $0.isEmpty } 
      .startWithNext { text in 
       print("t: \(text)") 
     } 

此外,您可以將您的executeSearch編寫爲SignalProducer,並使用flatMap(.Latest)創建信號鏈。

並且不要忘記使用mainQueueSheduler獲取結果到UI