【问题标题】:ReactiveCocoa 4 - Delaying and filtering signal eventsReactiveCocoa 4 - 延迟和过滤信号事件
【发布时间】:2016-08-24 20:32:36
【问题描述】:

我正在使用 ReactiveCocoa 4 实现搜索文本字段,并且只想在 X 时间内没有输入任何文本后点击搜索 API。我之前通过取消先前计划并在 textDidChange 委托方法中触发“executeSearch”选择器来完成此操作。这确保了每次我输入时,任何以前安排的“executeSearch”选择器都会被取消,并安排一个新的选择器在 X 秒内触发。

我现在想做同样的行为,但来自绑定到我的输入文本的信号生成器。我当前的实现很接近,但不一样。此行为仅将文本输入事件限制为仅每 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 文档以了解我应该使用哪些信号函数!谢谢!

【问题讨论】:

    标签: ios swift mvvm reactive-cocoa reactive-cocoa-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 的结果

    【讨论】:

      猜你喜欢
      • 2020-05-14
      • 1970-01-01
      • 2016-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多