ios - ReactiveCocoa 4 - 延迟和过滤信号事件

标签 ios swift mvvm reactive-cocoa reactive-cocoa-4

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

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

最佳答案

您需要使用 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)")
        }

您还可以将执行搜索编写为 SignalProducer 并使用 flatMap(.Latest) 创建信号链。

并且不要忘记使用 mainQueueSheduler 将结果发送到 UI

关于ios - ReactiveCocoa 4 - 延迟和过滤信号事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39132571/

相关文章:

ios - 自定义 tableview 单元格的问题。自定义 tableview 单元格内的 Collectionview 未根据单元格的高度进行调整

objective-c - UIButton 触摸事件不起作用

ios - 如何在不更改字体大小的情况下快速更改 UISegmentedControl 的字体?

ios - 字符串到 JSON 对象转换 iOS Swift

ios - 如何在 TableView 中显示 APAddressBook 的联系人

ios - 使用 ReactiveCocoa 4 在 MVVM 中将信号从 View 传递到模型

ios - 从适用于 iOS 10 的 xcode 7.3.1 将应用程序上传到 iTunes

使用 mvvm 模式的 WPF 数据绑定(bind)问题

c# - MVVM 我是否正确地实现了这个

iOS:长时间运行的任务