filter
過濾信號,使用它可以獲取滿足條件的信號.
- (void)filter { //只有當我們文本框內容長度大於5才想要獲取文本框的內容 [[_passWord.rac_textSignal filter:^BOOL(id value) { //value:源信號的內容 return [value length] > 5; //返回值就是過濾的條件,只有滿足這個條件才能獲取到內容 }] subscribeNext:^(id x) { NSLog(@"%@", x); }]; }
ignore:
忽略完某些值的信號.
- (void)ignore { //創建信號 RACSubject *subject = [RACSubject subject]; //ignore:忽略一些值 //ignoreValues:忽略所有值 RACSignal *ignoreSignal = [subject ignore:@"HMJ"]; // RACSignal *ignoreSignal = [subject ignoreValues]; //訂閱信號 [ignoreSignal subscribeNext:^(id x) { NSLog(@"%@", x); }]; //發送信號 [subject sendNext:@"HMJ"]; [subject sendNext:@"WGQ"]; }
distinctUntilChanged:
當上一次的值和當前的值有明顯的變化就會發出信號,否則會被忽略掉。
在開發中,刷新UI經常使用,只有兩次數據不一樣才需要刷新
- (void)distinctUntilChanged { //distinctUntilChanged:如果當前的值跟上一個值相同就不會被調用到 //創建信號 RACSubject *subject = [RACSubject subject]; [[subject distinctUntilChanged] subscribeNext:^(id x) { NSLog(@"%@", x); }]; [subject sendNext:@"HMJ"]; [subject sendNext:@"HMJ"]; [subject sendNext:@"HMJ"]; }
take:
從開始一共取N次的信號
- (void)take { //創建信號 RACSubject *subject = [RACSubject subject]; RACSubject *signal = [RACSubject subject]; //take:取前面幾個值 //在沒到第三個時就遇到[subject sendCompleted];那么就會停止發送信號 [[subject take:3] subscribeNext:^(id x) { NSLog(@"%@", x); }]; //takeLast:取后面多少個值,必須發送完成 //只有[subject sendCompleted];才會發送信號 [[subject takeLast:2] subscribeNext:^(id x) { NSLog(@"%@", x); }]; //takeUntil:只要傳入的信號發送完成或者signal發送信號,就不會再接收信號的內容 [[subject takeUntil:signal] subscribeNext:^(id x) { NSLog(@"%@", x); }]; //發送任意數據 [subject sendNext:@1]; [subject sendNext:@"HMJ"]; [subject sendNext:@3]; [subject sendCompleted]; [subject sendNext:@4]; [signal sendNext:@"signal"]; }
switchToLatest:
用於signalOfSignals(信號的信號),有時候信號也會發出信號,會在signalOfSignals中,獲取signalOfSignals發送的最新信號
- (void)switchToLatest { RACSubject *signalOfSignal = [RACSubject subject]; RACSubject *signal = [RACSubject subject]; // 獲取信號中信號最近發出信號,訂閱最近發出的信號。 // 注意switchToLatest:只能用於信號中的信號 //訂閱信號 [signalOfSignal.switchToLatest subscribeNext:^(id x) { NSLog(@"%@", x); }]; //發送信號 [signalOfSignal sendNext:signal]; [signal sendNext:@"signal"]; }
skip
跳過幾個信號,不接受
- (void)skip { //skip:跳躍幾個值再接收被訂閱 //創建信號 RACSubject *subject = [RACSubject subject]; [[subject skip:2] subscribeNext:^(id x) { NSLog(@"%@", x); }]; [subject sendNext:@"HMJ"]; [subject sendNext:@"1"]; [subject sendNext:@"3"]; }