在RxSwift / RxCocoa中使用多字节文本进行增量搜索
增量搜索当前用于各种应用程序。 搜索内容的方法通常是使用UISearchBar
。 如果使用RxSwift和RxCocoa等反应性扩展库,则可以使用rx.text
属性检测UISearchBar中的最新文本,但是在使用多字节文本的情况下,这是不可能的,因为存在输入转换并且文本仍未确定。
这仅是使用UISearchBar的原因,即使未确定文本,UITextField也能够检测最新文本。
不用担心,有一种方法可以使用UISearchBar进行增量搜索。 这是示例代码:
首先,在UISearchBar中设置一个委托,然后在ViewController中添加该委托方法。 此委托方法表示应通过返回值将当前未确定的输入文本替换为当前文本。 返回true
,您可以将最新文本作为searchBar.text
访问。 但是有必要等待一点时间来更新text属性。
接下来,添加用于增量搜索的属性,如下所示。
现在,您可以使用incrementalText
文本检测UISearchBar中的最新文本。
指定的委托方法完成时调用methodInvoked
运算符。 在这种情况下, debounce
运算符有两个作用,一个是等待更新text
属性。 另一种是在0到0.2秒之间过滤用户输入。
通过这种方式使用Rx,只需声明一个位置即可轻松处理具有可读性的复杂处理。
参考文献:
https://developer.apple.com/documentation/uikit/uisearchbardelegate/1624328-searchbar
https://github.com/ReactiveX/RxSwift
https://github.com/ReactiveX/RxSwift/tree/master/RxCocoa