一直取值直到返回yes
/// Takes values until the given block returns `YES`.
///
/// Returns a stream of the initial values in the receiver that fail `predicate`.
/// If `predicate` never returns `YES`, a stream equivalent to the receiver is
/// returned.
- (instancetype)takeUntilBlock:(BOOL (^)(id x))predicate;
一直取值直到返回NO
/// Takes values until the given block returns `NO`.
///
/// Returns a stream of the initial values in the receiver that pass `predicate`.
/// If `predicate` never returns `NO`, a stream equivalent to the receiver is
/// returned.
- (instancetype)takeWhileBlock:(BOOL (^)(id x))predicate;
一直跳,直到返回yes
/// Skips values until the given block returns `YES`.
///
/// Returns a stream containing the values of the receiver that follow any
/// initial values failing `predicate`. If `predicate` never returns `YES`,
/// an empty stream is returned.
- (instancetype)skipUntilBlock:(BOOL (^)(id x))predicate;
一直跳,直到返回NO
/// Skips values until the given block returns `NO`.
///
/// Returns a stream containing the values of the receiver that follow any
/// initial values passing `predicate`. If `predicate` never returns `NO`, an
/// empty stream is returned.
- (instancetype)skipWhileBlock:(BOOL (^)(id x))predicate;
/// Returns a stream of values for which -isEqual: returns NO when compared to the
/// previous value.
//
// distinctUntilChanged 与之前的值不相等的时候发送值
- (instancetype)distinctUntilChanged;
/// Take `next`s until the `signalTrigger` sends `next` or `completed`.
///
/// Returns a signal
which passes throughall events from the receiver
until `signalTrigger` sends `next` or `completed`,
at which point the returned signal will send `completed`.
- (RACSignal *)takeUntil:(RACSignal *)signalTrigger;
// cell.rac_prepareForReuseSignal 这就是signalTrigger
RAC(self.viewModel, name) = [cell.textField.rac_textSignaltakeUntil:cell.rac_prepareForReuseSignal];