ReactiveCocoa筆記1

ReactiveCocoa筆記

  1. map:方法可以轉(zhuǎn)換信號(hào),將一個(gè)信號(hào)處理后轉(zhuǎn)變?yōu)榱硪粋€(gè)信號(hào),例如:
RACSignal *validUsernameSignal = [self.usernameTextField.rac_textSignal
      map:^id(NSString *text) {
        return @([self isValidUsername:text]);
      }];
  1. RAC(TARGET, ...)宏可以用keyValue的方式使用信號(hào)中的值給object的key賦值,例如:
RAC(self.passwordTextField, backgroundColor) =
    [validPasswordSignal
      map:^id(NSNumber *passwordValid) {
        return [passwordValid boolValue] ? [UIColor clearColor] : [UIColor yellowColor];
      }];
  1. combineLatest:方法可以組合多個(gè)信號(hào),變?yōu)橐粋€(gè)信號(hào),例如:
RACSignal *signUpActiveSignal =
    [RACSignal combineLatest:@[validUsernameSignal, validPasswordSignal]
                      reduce:^id(NSNumber *usernameValid, NSNumber *passwordValid) {
                        return @([usernameValid boolValue] && [passwordValid boolValue]);
                      }];
  1. doNext:可以添加signal流的響應(yīng)事件而不改變當(dāng)前的管道流,我們稱它為side-effect,side-effect不改變信號(hào)的轉(zhuǎn)變,只是做出響應(yīng):例子如下:
[[[[self.signInButton
   rac_signalForControlEvents:UIControlEventTouchUpInside]
   doNext:^(id x) {
     self.signInButton.enabled = NO;
     self.signInFailureText.hidden = YES;
   }]
   flattenMap:^id(id x) {
     return [self signInSignal];
   }]
   subscribeNext:^(NSNumber *signedIn) {
     self.signInButton.enabled = YES;
     BOOL success = [signedIn boolValue];
     self.signInFailureText.hidden = success;
     if (success) {
       [self performSegueWithIdentifier:@"signInSuccess" sender:self];
     }
   }];
  1. flattenMap:可以取出signal的signal.當(dāng)我們使用map:的時(shí)候,直接return一個(gè)value,系統(tǒng)便會(huì)自動(dòng)封裝成一個(gè)新的signal.但是當(dāng)返回的value本身就是一個(gè)signal的時(shí)候,系統(tǒng)還是會(huì)幫我們?cè)诎粚觭ignal, 所以,這種情況下,我們?nèi)∷幍氖亲罾锩娴膕ignal,而不是系統(tǒng)在外層幫我們包裹的signal.所以這種情況下就會(huì)使用flattenMap:而不是map:,還是上面的代碼
[[[[self.signInButton
   rac_signalForControlEvents:UIControlEventTouchUpInside]
   doNext:^(id x) {
     self.signInButton.enabled = NO;
     self.signInFailureText.hidden = YES;
   }]
   flattenMap:^id(id x) {
     return [self signInSignal];
   }]
   subscribeNext:^(NSNumber *signedIn) {
     self.signInButton.enabled = YES;
     BOOL success = [signedIn boolValue];
     self.signInFailureText.hidden = success;
     if (success) {
       [self performSegueWithIdentifier:@"signInSuccess" sender:self];
     }
   }];

詳細(xì)工程參見raywenderlich上的

ReactiveCocoa Tutorial – The Definitive Introduction: Part 1/2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • RAC使用測(cè)試Demo下載:github.com/FuWees/WPRACTestDemo 1.ReactiveC...
    FuWees閱讀 6,653評(píng)論 3 10
  • 文/安敢心 小龍蝦今年一歲半了。 她剛生下來時(shí),眼睛的位置只有一條細(xì)細(xì)的縫隙,是個(gè)小眼睛沒跑了,圓圓的臉龐,肉嘟嘟...
    安敢心閱讀 243評(píng)論 4 2
  • 法國導(dǎo)演克勞德·勒魯什曾說:“女人比男人更有意思,她們更勇敢,沒有像男人那樣愛撒謊。她們創(chuàng)造了人類,更接近人類的核...
    小邦辰閱讀 819評(píng)論 0 0
  • 人生的意義到底是什么呢,這個(gè)問題太大,以至于我小的時(shí)候不能回答,過了無數(shù)年還覺得無力回答。這個(gè)問題又太難,以至于每...
    覺醒的流川閱讀 2,000評(píng)論 1 3

友情鏈接更多精彩內(nèi)容