テキストフィールドに入力された値からインクリメンタルサーチを行いたい場合というのはよくある要件ではないでしょうか。そのようなパターンを ReactiveCocoa では以下のように実装することができます。
[[[[[textField.rac_textSignal
filter:^BOOL(NSString *text) {
return text.length > 0;
}]
throttle:0.5]
map:^(NSString *text) {
return [[APIClient sharedClient] fetchSearchResultWithQuery:text];
}]
switchToLatest]
subscribeNext:^(id JSON) {
NSLog(@"Search result: %@", JSON);
}];
-
-filter:
で空文字を除外する。 -
-throttle:
で、入力が一定時間止まった場合にだけテキストの変化を検知するようにする。 -
-map:
で実際に検索処理を実施・結果を通知するRACSignal
を返す(これは適宜実装)。 -
-switchToLatest
で、検索処理が複数回行われる場合に直前の検索処理をキャンセルする。
という流れになります。