使用ReactiveCocoa(-)

(-)簡介

ReactiveCocoa(簡稱為RAC),是由Github開源的一個應(yīng)用于iOS和OS開發(fā)的新框架奇徒。框架github地址
當(dāng)我們在寫項目的時候,會對應(yīng)很多事件響應(yīng)缨硝,如:例如按鈕的點(diǎn)擊摩钙,收到網(wǎng)絡(luò)消息,屬性的變化(通過KVO)或者用戶位置的變化(通過CoreLocation)查辩。但是這些事件都用不同的方式來處理胖笛,比如action、delegate宜岛、KVO长踊、callback等。ReactiveCocoa為事件定義了一個標(biāo)準(zhǔn)接口萍倡,從而可以使用一些基本工具來更容易的連接身弊、過濾和組合×星茫可以使代碼高聚合佑刷、低耦合。更多簡介不再復(fù)述酿炸,官方框架簡介地址:

(二)使用例子

筆者的podfile內(nèi)容

use_frameworks!

pod 'ReactiveCocoa', '~> 4.1.0'
1:按鈕響應(yīng)點(diǎn)擊事件

方法使按鈕的動作不再是一個方法了,而換成了一個block.

 UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
   
    [button setFrame:CGRectMake(100, 100, 100, 100)];
    
    [button setBackgroundColor:[UIColor redColor]];
    
    [self.view addSubview:button];
    
    [[button rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {
        NSLog(@"點(diǎn)擊按鈕了");
    }];

筆者之前也寫過一個封裝過一個按鈕的例子涨冀,也可以用block來返回按鈕的點(diǎn)擊動作填硕。歡迎查看簡書地址

2:替換代理

可以不再用代理來監(jiān)聽自定義視圖的動作鹿鳖,而換成了一個block.
1)初始化一個自定義視圖扁眯,觸發(fā)一個手勢動作

#import "TestView.h"

@implementation TestView

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    [self doDelegate];
}
-(void)doDelegate{
    NSLog(@"--doDelegate--");
}
@end

2)在控制器里監(jiān)聽這個動作

TestView *testView = [[TestView alloc]initWithFrame:CGRectMake(100, 160, 100, 40)];
    testView.backgroundColor = [UIColor yellowColor];
    [self.view addSubview:testView];
    
    [[testView rac_signalForSelector:@selector(doDelegate)]subscribeNext:^(id x) {
        NSLog(@"觸發(fā)自定義視圖的代理方法了");

    }];

但是這種方法是不能傳參數(shù)的,如果需要傳遞參數(shù)需要在自定義的視圖里添加一個屬性


@property (nonatomic, strong) RACSubject *delegateSignal;

在m文件里初始化這個信號,并且發(fā)送信號

- (RACSubject *)delegateSignal
{
    if (_delegateSignal == nil) {
        _delegateSignal = [RACSubject subject];
    }
    return _delegateSignal;
}

-(void)doDelegate{
    NSLog(@"--doDelegate--");
    [self.delegateSignal sendNext:@"觸發(fā)代理了"];

}

然后才能在控制器里訂閱這個信號翅帜,處理這個代理

 [testView.delegateSignal subscribeNext:^(id x) {
        NSLog(@"--%@----",x);
    }];

這樣就完成了有參數(shù)的代理的替換

3:監(jiān)聽通知事件

不再使用方法來接受通知姻檀,而換成了一個block.

[[[NSNotificationCenter defaultCenter] rac_addObserverForName:@"testNotification" 
                               object:nil] subscribeNext:^(id x) {
        NSLog(@"接收到testNotification通知了");
    }];
(三)更多

本文只是簡單介紹了幾個用途,還有很多就不一一列舉了涝滴。
ReactiveCocoa框架為很多系統(tǒng)類添加了分類:
NSData+RACSupport.h
NSFileHandle+RACSupport.h
NSString+RACSupport.h
NSURLConnection+RACSupport.h
UITextField+RACSignalSupport.h
NSObject+RACSelectorSignal.h
NSNotificationCenter+RACSupport.h
UIControl+RACSignalSupport.h
等等绣版。更多功能到代碼里找找

測試?yán)?a target="_blank" rel="nofollow">github地址

如果本文寫的有什么錯誤,希望大家多指正<叽T映椤!希望和大家一起進(jìn)步韩脏。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缩麸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子赡矢,更是在濱河造成了極大的恐慌杭朱,老刑警劉巖阅仔,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異弧械,居然都是意外死亡八酒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門梦谜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丘跌,“玉大人,你說我怎么就攤上這事唁桩”帐鳎” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵荒澡,是天一觀的道長报辱。 經(jīng)常有香客問我,道長单山,這世上最難降的妖魔是什么碍现? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮米奸,結(jié)果婚禮上昼接,老公的妹妹穿的比我還像新娘。我一直安慰自己悴晰,他們只是感情好慢睡,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著铡溪,像睡著了一般漂辐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棕硫,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天髓涯,我揣著相機(jī)與錄音,去河邊找鬼哈扮。 笑死纬纪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的滑肉。 我是一名探鬼主播育八,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赦邻!你這毒婦竟也來了髓棋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎按声,沒想到半個月后膳犹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡签则,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年须床,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渐裂。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡豺旬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出柒凉,到底是詐尸還是另有隱情族阅,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布膝捞,位于F島的核電站坦刀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蔬咬。R本人自食惡果不足惜鲤遥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望林艘。 院中可真熱鬧盖奈,春花似錦、人聲如沸狐援。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咕村。三九已至,卻和暖如春蚊俺,著一層夾襖步出監(jiān)牢的瞬間懈涛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工泳猬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留批钠,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓得封,卻偏偏與公主長得像埋心,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子忙上,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

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