ReactiveCocoa 이해 노트(3)

3518 단어
앞의 글을 보고 여러분은 RAC에 대해 기본적인 이해를 했고 신호의 창설과 사용을 알았습니다. 만약에 기본적인 용법만 사용한다면 RAC는 기능이 완비된 Framework가 될 것입니다. 꽃잎, 미단의 iOS 개발팀에 의해 크게 추앙받을까요?다음은 RAC의 일부 고급 사용법을 설명하여 우리가 소프트웨어 개발 과정에서 물 만난 고기처럼 될 것이다.
바꾸다
조끼를 갈아입다
///                RACSignal *signal = [self.usernameField.rac_textSignal map:^id(NSString *value) { return @(value.length); }]; [signal subscribeNext:^(id x) { NSLog(@"lenght = %@", x); }];

거르다
조건이 충족되지 않으면 효력이 발생하는 것을 금지한다
///               6,       RACSignal *signal = [self.usernameField.rac_textSignal filter:^BOOL(NSString *value) { return value.length>=6; }]; [signal subscribeNext:^(NSString *value) { NSLog(@"string = %@", value); }];

등한시하다
지정된 데이터 무시
///          ,          RACSignal *signal = [self.usernameField.rac_textSignal ignore:@""]; [signal subscribeNext:^(NSString *value) { NSLog(@"string = %@", value); }];

외모 협회
새로운 데이터를 받아야만 효력이 발생하고 신호 데이터가 달라야만 인쇄할 수 있다
///            ,          RACSignal *signal = [[self.usernameField.rac_textSignal map:^id(NSString *value) { return @([value intValue]); }] distinctUntilChanged]; [signal subscribeNext:^(NSNumber *value) { NSLog(@"number = %@", value); }];

건너뛰다
지정된 조건 건너뛰기
///   3    RACSignal *signal = [self.usernameField.rac_textSignal skip:3]; [signal subscribeNext:^(NSString *value) { NSLog(@"number = %@", value); }];
///         ,           6     RACSignal *signal = [self.usernameField.rac_textSignal skipWhileBlock:^BOOL(NSString *value) { NSLog(@"numberfsdfsdafsdf = %@", value); return value.length<6; }]; [signal subscribeNext:^(NSString *value) { NSLog(@"number = %@", value); }];
위의 코드를 보면 다들 이상할지도 몰라요. 건너뛰는 것과 필터하는 것이 뭐가 달라요. 똑같은 거 아니에요?특별히 여기서 설명하자면 (처음에는 나도 의심스러웠다): 건너뛰기: 조건이 충족될 때 신호가 효력이 발생하고 효력이 발생한 후에 조건을 판단하지 않는다는 뜻이다.필터: 조건이 충족되지 않을 때 신호를 필터하고 신호가 터치될 때마다 판단합니다.
API
`
/// 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;

  • ///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; `

  • you
    이것은 건너뛰는 것과 상응하는 것이다.건너뛰는 것은 앞의 효력을 상실하고 뒤의 효력이 발생한다.상응하는 것은 앞의 효력이 발생하고 뒤의 효력이 상실되는 것이다.
    ///   5         RACSignal *signal = [self.usernameField.rac_textSignal take:5]; [signal subscribeNext:^(NSString *value) { NSLog(@"number = %@", value); }];

    마찬가지로 유효 조건 API
    ` 
     
    도 있음
  • (instancetype)takeUntilBlock:(BOOL (^)(id x))predicate;
  • (instancetype)takeWhileBlock:(BOOL (^)(id x))predicate; `

  • 신구
    KVO처럼 새로운 데이터와 오래된 데이터를 동시에 얻을 수 있는 API가 있습니까?강력한 RAC가 알려줄게.
    ///   runing      ,next      RACSignal *signal = [self.usernameField.rac_textSignal scanWithStart:@"" reduce:^id(id running, id next) { return next; }];

    좋은 웹페이지 즐겨찾기