ReactiveCocoa 집계 2 흔 한 용법 및 매크로

작품 링크:http://www.jianshu.com/users/1e0f5e6f73f6/top_articles
1. ReactiveCocoa 개발 에서 흔히 볼 수 있 는 용법
1.1 대체 에이전트:
  • rac_signalForSelector: 대리 대신 사용 합 니 다.
  • rac_signal ForSelector: 대상 을 호출 하 는 방법 에 대한 정 보 를 신호 로 바 꾸 려 면 이 방법 을 사용 하면 신 호 를 보 냅 니 다.
  •  [[_redView rac_signalForSelector:@selector(btnClick:)] subscribeNext:^(id x) {
            NSLog(@"          ");
        }];
    

    1.2 KVO 대신:
  • rac_valuesAndChangesForKeyPath: 특정한 대상 의 속성 변 화 를 감청 하 는 데 사용 합 니 다.
  • 감청 redV 의 center 속성 을 신호 로 바 꾸 고 값 이 바 뀌 면 신 호 를 보 냅 니 다.
  • center, frame, bounds 의 변 화 를 감청 할 수 있 습 니 다
  • [[_redView rac_valuesForKeyPath:@"frame" observer:nil] subscribeNext:^(id x) {
    
            NSLog(@"%@",x);
        }];
    
    
        [[_redView rac_valuesForKeyPath:@"bounds" observer:nil] subscribeNext:^(id x) {
    
            NSLog(@"%@",x);
        }];
    

    1.3 감청 사건:
  • rac_signalForControlEvents: 어떤 사건 을 감청 하 는 데 사용 된다.
  • 버튼 을 누 르 면 이 벤트 를 신호 로 바 꾸 고 버튼 을 누 르 면 신 호 를 보낸다
  • [[self.btn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {
    
            NSLog(@"      ");
        }];
    

    1.4 대체 알림:
  • rac_addObserverForName: 어떤 통 지 를 감청 하 는 데 사용 합 니 다.
  • 감 청 된 통 지 를 신호 로 전환한다
  •  [[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIKeyboardWillShowNotification object:nil] subscribeNext:^(id x) {
            NSLog(@"    ");
        }];
    

    1.5 감청 텍스트 상자 텍스트 변경:
  • rac_textSignal: 텍스트 상자 가 바 뀌 면 이 신 호 를 보 냅 니 다.
  •   [_textField.rac_textSignal subscribeNext:^(id x) {
    
           NSLog(@"     %@",x);
       }];
    

    1.6 인터페이스 에 여러 번 요청 이 있 을 때 데 이 터 를 가 져 와 야 화면 을 보 여 줍 니 다.
  • rac_liftSelector:withSignalsFromArray:Signals: 들 어 오 는 Signals (신호 배열) 는 모든 signal 이 적어도 sendNext 를 한 번 지나 면 첫 번 째 selector 인 자 를 촉발 하 는 방법 입 니 다.
  • 사용 주의: 몇 개의 신호, 매개 변수 1 의 방법 은 몇 개의 매개 변수 이 고 모든 매개 변수 가 신호 에 대응 하 는 데이터 입 니 다.
  • 여러 요청 을 처리 하고 결 과 를 되 돌 릴 때 통일 적 으로 처리 합 니 다.
  •  RACSignal *request1 = [RACSignal createSignal:^RACDisposable *(id subscriber) {
    
            //     1
            [subscriber sendNext:@"    1"];
            return nil;
        }];
    
        RACSignal *request2 = [RACSignal createSignal:^RACDisposable *(id subscriber) {
            //     2
            [subscriber sendNext:@"    2"];
            return nil;
        }];
    
        //     :    ,           ,             。
        [self rac_liftSelector:@selector(updateUIWithR1:r2:) withSignalsFromArray:@[request1,request2]];
    
    
    }
    //   UI
    - (void)updateUIWithR1:(id)data r2:(id)data1
    {
        NSLog(@"  UI%@  %@",data,data1);
    }
    

    2. ReactiveCocoa 흔 한 매크로
    2.1 RAC(TARGET, [KEYPATH, [NIL_VALUE]]): 특정한 대상 에 게 사용 하 는 특정한 속성 바 인 딩
  • 예 를 들 어 텍스트 상자 의 내용 을 감청 합 니 다.
  • 일반 용법
  •         [_textField.rac_textSignal subscribeNext:^(id x) {
    
                _label.text = x;
            }];
    
    
  • 매크로 용법
  •  //                 ,        ,          
        RAC(_label,text) = _textField.rac_textSignal;
    

    2.2 RACObserve(self, name): 특정한 대상 의 특정한 속성 을 감청 하고 신 호 를 되 돌려 준다.
    [RACObserve(self.view, center) subscribeNext:^(id x) {
    
            NSLog(@"%@",x);
        }];
    
    
    

    2.3 @weakify(Obj) @strongify(Obj) 보통 두 가 지 는 모두 조합 해서 사용 하고 순환 인용 문 제 를 해결한다.
    @weakify(self);
        RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id subscriber) {
    
            @strongify(self);
            NSLog(@"%@",self);
            return nil;
        }];
        _signal = signal;
    

    2.4 RACTuplePack: 데 이 터 를 RACTuple (메타 클래스) 로 포장 합 니 다.
        //             
        RACTuple *tuple = RACTuplePack(@10,@20);
    

    2.5 RACTupleUnpack: RACTuple (모듈 클래스) 를 대응 하 는 데이터 로 압축 해제 합 니 다.
     //             
        RACTuple *tuple = RACTuplePack(@"China",@"beijing");
        //     ,      ,             
        RACTupleUnpack(NSString *contry, NSString *city) = tuple;
        NSLog(@"%@,%@",contry,city);
    

    좋은 웹페이지 즐겨찾기