我的ViewController包含一个UISearchBar并实现UISearchBarDelegate协议。我已为searchBartextDidChange:
创建了subscribeNext
正确触发的信号:
RACSignal *searchTextChangeSignal = [self rac_signalForSelector:@selector(searchBar:textDidChange:) fromProtocol:@protocol(UISearchBarDelegate)];
[searchTextChangeSignal subscribeNext:^(id x){
// This works.
}];
此时,我想将此过滤器的结果过滤为1)仅包含大于3个字符的文本,以及2)300 ms的限制。我的尝试:
[[searchTextChangeSignal filter:^(RACTuple *tuple) {
NSString *textEnteredIntoSearchBar = (NSString *)tuple.second;
return textEnteredIntoSearchBar.length > 3;
}] throttle:300];```
上面的代码不起作用。块永远不会被执行。如果我将filter
方法替换为subscribeNext
,则subscribeNext
块执行。此外,XCode自动填充上面的filter
方法,因此该方法可用。我有什么东西在这里失踪吗?这样做的正确方法是什么?非常感谢任何帮助。
答案 0 :(得分:1)
缺少的理解是信号在订阅之前不会执行任何工作。在节流之后调用其中一个订阅方法,您将看到数据开始流过。