ReactiveCocoa個(gè)人記錄

參考資料:

Swift, please see ReactiveCocoa or ReactiveSwift

常見用法

1:rac_signalForControlEvents監(jiān)聽事件但指,替換addTarget監(jiān)聽

    [[self.myButton rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {
        @strongify(self);
        //改變屬性 觸發(fā)KVO
        self.userModel.userName=@"cnblogs";
        //發(fā)送通知 觸發(fā)通知監(jiān)聽
         [[NSNotificationCenter defaultCenter] postNotificationName:MPTNotificationName object:nil];
        NSLog(@"rac_signalForControlEvents監(jiān)聽事件 - ");
    }];
    ```
    2:rac_textSignal 監(jiān)聽文本框的文字改變
[[self.myTextField rac_textSignal] subscribeNext:^(id x) {
    NSLog(@"rac_textSignal當(dāng)前輸入:%@",x);
}];

//distinctUntilChanged 相同就不會(huì)再響應(yīng)  takeUntil:(RACSignal *):獲取信號(hào)直到某個(gè)信號(hào)執(zhí)行完成
[[[[self.myTextField rac_textSignal] distinctUntilChanged] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {
    NSLog(@"rac_textSignal-distinctUntilChanged當(dāng)前輸入:%@",x);
}];
```

3:rac_valuesAndChangesForKeyPath KVO監(jiān)聽

    [[self.userModel rac_valuesAndChangesForKeyPath:@"userName" 
options:NSKeyValueObservingOptionNew observer:nil] subscribeNext:^(id x) {
        NSLog(@"userName now value:%@",x[0]);
    }];
    ```
   4:監(jiān)聽通知

[[[[NSNotificationCenter defaultCenter] rac_addObserverForName:MPTNotificationName object:nil] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {
    NSLog(@"收到通知了");
}];
```

5:替換代理方法的實(shí)現(xiàn) rac_signalForSelector

    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"RAC" message:@"RAC TEST" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"other", nil];
    [[self rac_signalForSelector:@selector(alertView:clickedButtonAtIndex:) fromProtocol:@protocol(UIAlertViewDelegate)] subscribeNext:^(RACTuple *tuple) {
        NSLog(@"tuple.first:%@",tuple.first);
        NSLog(@"tuple.second:%@",tuple.second);
        NSLog(@"tuple.third:%@",tuple.third);
        //tuple.first UIAlertView當(dāng)前對(duì)象
        //tuple.second索引值
    }];
    [alertView show];
    
//  [[self rac_signalForSelector:@selector(alertView:clickedButtonAtIndex:)] subscribeNext:^(id x) {
//      
//  }];
    
    //UIAlertView 還有更簡便的 上面只是為了演示rac_signalForSelector  下面的X就是索引值
    //如果使用此方法rac_signalForSelector 不會(huì)再執(zhí)行了医吊。因?yàn)閞ac_buttonClickedSignal內(nèi)部已經(jīng)訂閱了rac_signalForSelector方法
    [[alertView rac_buttonClickedSignal] subscribeNext:^(id x) {
        NSLog(@"index %@",x);
    }];
    ```

   6.處理多個(gè)請(qǐng)求试疙,都返回結(jié)果的時(shí)候,統(tǒng)一做處理. 

rac_liftSelector
RACSignal *request1 = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
// 發(fā)送請(qǐng)求1
[subscriber sendNext:@"發(fā)送請(qǐng)求1"];
return nil;
}];

RACSignal *request2 = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
    // 發(fā)送請(qǐng)求2
    [subscriber sendNext:@"發(fā)送請(qǐng)求2"];
    return nil;
}];

// 使用注意:幾個(gè)信號(hào)舶胀,參數(shù)一的方法就幾個(gè)參數(shù),每個(gè)參數(shù)對(duì)應(yīng)信號(hào)發(fā)出的數(shù)據(jù)碧注。
[self rac_liftSelector:@selector(updateUIWithR1:r2:) withSignalsFromArray:@[request1,request2]];
更新UI
  • (void)updateUIWithR1:(id)data r2:(id)data1
    {
    NSLog(@"更新UI%@ %@",data,data1);
    }
隊(duì)列

//then用法
//用于連接兩個(gè)信號(hào)嚣伐,當(dāng)?shù)谝粋€(gè)信號(hào)完成,才會(huì)連接then返回的信號(hào)
RACSignal *thenSignal=[aSignal then:^RACSignal *{
return bSignal;
}];

[thenSignal subscribeNext:^(id x) {
    NSLog(@"thenSignal的值:%@",x);
}];
//輸出  thenSignal的值:7   thenSignal的值:9   bSignal清理了  aSignal清理了

//then實(shí)例
[[[[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
    NSLog(@"第一步");
    [subscriber sendCompleted];//向訂閱者發(fā)送完成信號(hào)萍丐,否者一直處于執(zhí)行中
    return nil;
}] then:^RACSignal *{
    return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
        NSLog(@"第二步");
        [subscriber sendCompleted];
        return nil;
    }];
}] then:^RACSignal *{
    return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
        NSLog(@"第三步");
        [subscriber sendCompleted];
        return nil;
    }];
}] subscribeCompleted:^{
    NSLog(@"完成");
}];
//輸出:第一步   第二步  第三步
//說明:then的用法要跟上面這樣使用轩端,它會(huì)在RACSignal里面就執(zhí)行
- doNext doCompleted執(zhí)行時(shí)間   doNext: 執(zhí)行Next之前,會(huì)先執(zhí)行這個(gè)Block  doCompleted: 執(zhí)行sendCompleted之前逝变,會(huì)先執(zhí)行這個(gè)Block

[[[[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
    [subscriber sendNext:@"執(zhí)行sendNext"];
    NSLog(@"執(zhí)行sendNext");
    [subscriber sendCompleted];
    return nil;
}] doNext:^(id x) {
    NSLog(@"執(zhí)行doNext");
}] doCompleted:^{
    NSLog(@"執(zhí)行doCompleted");
}] subscribeNext:^(id x) {
    NSLog(@"執(zhí)行subscribeNext");
}];

// 輸出
// 執(zhí)行doNext
// 執(zhí)行subscribeNext
// 執(zhí)行sendNext
// 執(zhí)行doCompleted

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末基茵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子壳影,更是在濱河造成了極大的恐慌拱层,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宴咧,死亡現(xiàn)場離奇詭異根灯,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)悠汽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門箱吕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人柿冲,你說我怎么就攤上這事茬高。” “怎么了假抄?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵怎栽,是天一觀的道長。 經(jīng)常有香客問我宿饱,道長熏瞄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任谬以,我火速辦了婚禮强饮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘为黎。我一直安慰自己邮丰,他們只是感情好行您,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著剪廉,像睡著了一般娃循。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上斗蒋,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天捌斧,我揣著相機(jī)與錄音,去河邊找鬼泉沾。 笑死捞蚂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的爆哑。 我是一名探鬼主播洞难,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼揭朝!你這毒婦竟也來了队贱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤潭袱,失蹤者是張志新(化名)和其女友劉穎柱嫌,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屯换,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡编丘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了彤悔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘉抓。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖晕窑,靈堂內(nèi)的尸體忽然破棺而出抑片,到底是詐尸還是另有隱情,我是刑警寧澤杨赤,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布敞斋,位于F島的核電站,受9級(jí)特大地震影響疾牲,放射性物質(zhì)發(fā)生泄漏植捎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一阳柔、第九天 我趴在偏房一處隱蔽的房頂上張望焰枢。 院中可真熱鬧,春花似錦、人聲如沸济锄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拟淮。三九已至,卻和暖如春谴忧,著一層夾襖步出監(jiān)牢的瞬間很泊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國打工沾谓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留委造,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓均驶,卻偏偏與公主長得像昏兆,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子妇穴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容