RAC iOS

使用RAC

1.target-action

RAC最基本的入門使用技巧就是對事件的監聽。

PS:在iOS開發中,我們所說的點擊事件其實就是target-action,接觸過iOS開發的人都不會陌生UIControlEventTouchUpInside,這就是按下并松開的動作。不僅僅是UIButton,還有UITextField也有目標-動作模式。

[[self.textFild rac_signalForControlEvents:UIControlEventEditingChanged] subscribeNext:^(id x){

NSLog(@"change");

}];

就這么短短的兩行代碼。他實現了一個功能,即監聽了textFild的UIControlEventEditingChanged事件,當事件發生時實現方法NSLog。

所以我們就可以以這段代碼為模板進行RAC的使用,舉一反三,以后的UIButton點擊事件我們都可以用RAC方法進行添加,再也不用add Target了。

對于textFild的文字更改監聽也有更簡單的寫法

[[self.textFild rac_textSignal] subscribeNext:^(id x) {

NSLog(@"%@",x);

}];

這樣就是每次改變TextFild都輸出改變后的結果。

再比如給我們的某個label添加一個手勢動作,我們也可以用簡單的RAC代碼完成

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];

[[tap rac_gestureSignal] subscribeNext:^(id x) {

NSLog(@"tap");

}];

[self.view addGestureRecognizer:tap];

2.代理

用RAC寫代理是有局限的,它只能實現返回值為void的代理方法

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);

NSLog(@"%@",tuple.second);

NSLog(@"%@",tuple.third);

}];

[alertView show];

我們來看RAC的語句。@selector是指這次事件監聽的方法fromProtocol指依賴的代理。這里block中有一個RACTuple,他相當于是一個集合類,他下面的first,second等就是類的各個參數,我這里點了AlertView第二個按鈕other輸出了一下。

2016-01-04 18:24:29.114 RACStudyTest[5003:388870] >

2016-01-04 18:24:29.115 RACStudyTest[5003:388870] 1

2016-01-04 18:24:29.115 RACStudyTest[5003:388870] (null)

可以看出tuple.second是ButtonAtIndex中Button的序號。那么對于上面那個我舉的例子,就可以用switch給各個按鈕添加方法,這樣的代碼看起來更容易理解,方面后期維護。

當然了,AlertView代理也有簡化的代碼。

[[alertView rac_buttonClickedSignal] subscribeNext:^(id x) {

NSLog(@"%@",x);

}];

這里的x就是各個Button的序號了,可以直接應對我上述遇到的問題。

3.通知

NSMutableArray *dataArray = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", nil];

[[NSNotificationCenter defaultCenter] postNotificationName:@"postData" object:dataArray];

而在接受的頁面我們需要增加觀察者并接受數組,這時我們的RAC就派上用場了。

[[[NSNotificationCenter defaultCenter] rac_addObserverForName:@"postData" object:nil] subscribeNext:^(NSNotification *notification) {

NSLog(@"%@", notification.name);

NSLog(@"%@", notification.object);

}];

當這個頁面監聽到名為postdata的通知時他就會執行block中的方法,當然這里的參數改成id x也是可以的,這里用NSNotification主要是強調它的類型。讓我們看看控制臺的輸出。

2016-01-04 20:10:52.274 RACStudyTest[5918:439077] postData

2016-01-04 20:10:52.275 RACStudyTest[5918:439077] (

1,

2,

3

)

可見,notification.object就是我們想要的數組,當然我們也可以傳一些model。值得一提的是,RAC中的通知不需要remove observer,因為在rac_add方法中他已經寫了remove。

4.KVO

RAC中得KVO大部分都是宏定義,所以代碼異常簡潔,簡單來說就是RACObserve(TARGET, KEYPATH)這種形式,TARGET是監聽目標,KEYPATH是要觀察的屬性值,這里舉一個很簡單的例子,如果UIScrollView滾動則輸出success。

UIScrollView *scrolView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 200, 400)];

scrolView.contentSize = CGSizeMake(200, 800);

scrolView.backgroundColor = [UIColor greenColor];

[self.view addSubview:scrolView];

[RACObserve(scrolView, contentOffset) subscribeNext:^(id x) {

NSLog(@"success");

}];

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,923評論 6 535
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,740評論 3 420
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,856評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,175評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,931評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,321評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,383評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,533評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,082評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,891評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,618評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,319評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,732評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,987評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,794評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,076評論 2 375

推薦閱讀更多精彩內容

  • 最近看到好多人用到RAC,就簡單的看了一些別的大神文章,寫出來了一點 什么是RAC? 幾乎每一篇介紹RAC的文章開...
    53a48e34aea2閱讀 1,184評論 1 8
  • 簡介 ReactiveCocoa(簡稱為RAC),RAC具有函數響應式編程特性,由Matt Diephouse開源...
    PHM閱讀 13,032評論 4 53
  • 前言 之前對RAC有了一個基本的認識,了解了它的作用,以及RAC的運行機制,我們知道只要是信號(RACSignal...
    大大盆子閱讀 4,509評論 0 11
  • 二、基本使用 #import// 導入頭文件 2-1、監聽文本框使用 - (void)learnRACWithTe...
    清蘂翅膀的技術閱讀 373評論 0 0
  • “喂,肖,起來!你要接受問訊!”獄警打開了牢門,對著里面二十幾個囚犯吆喝。 一個染著栗色頭發、眼神空洞的少年站了起...
    猜晴尋閱讀 305評論 0 1