RAC iOS

使用RAC

1.target-action

RAC最基本的入門使用技巧就是對事件的監(jiān)聽。

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

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

NSLog(@"change");

}];

就這么短短的兩行代碼怠蹂。他實現(xiàn)了一個功能善延,即監(jiān)聽了textFild的UIControlEventEditingChanged事件,當事件發(fā)生時實現(xiàn)方法NSLog褥蚯。

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

對于textFild的文字更改監(jiān)聽也有更簡單的寫法

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

NSLog(@"%@",x);

}];

這樣就是每次改變TextFild都輸出改變后的結(jié)果澳骤。

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

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

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

NSLog(@"tap");

}];

[self.view addGestureRecognizer:tap];

2.代理

用RAC寫代理是有局限的,它只能實現(xiàn)返回值為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是指這次事件監(jiān)聽的方法fromProtocol指依賴的代理摊册。這里block中有一個RACTuple,他相當于是一個集合類颊艳,他下面的first茅特,second等就是類的各個參數(shù),我這里點了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的序號了笛丙,可以直接應(yīng)對我上述遇到的問題。

3.通知

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

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

而在接受的頁面我們需要增加觀察者并接受數(shù)組假颇,這時我們的RAC就派上用場了胚鸯。

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

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

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

}];

當這個頁面監(jiān)聽到名為postdata的通知時他就會執(zhí)行block中的方法,當然這里的參數(shù)改成id x也是可以的笨鸡,這里用NSNotification主要是強調(diào)它的類型蠢琳。讓我們看看控制臺的輸出。

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就是我們想要的數(shù)組傲须,當然我們也可以傳一些model。值得一提的是趟脂,RAC中的通知不需要remove observer泰讽,因為在rac_add方法中他已經(jīng)寫了remove。

4.KVO

RAC中得KVO大部分都是宏定義昔期,所以代碼異常簡潔已卸,簡單來說就是RACObserve(TARGET, KEYPATH)這種形式,TARGET是監(jiān)聽目標硼一,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");

}];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末愧哟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子哼蛆,更是在濱河造成了極大的恐慌蕊梧,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腮介,死亡現(xiàn)場離奇詭異肥矢,居然都是意外死亡,警方通過查閱死者的電腦和手機叠洗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門甘改,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人灭抑,你說我怎么就攤上這事十艾。” “怎么了名挥?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵疟羹,是天一觀的道長主守。 經(jīng)常有香客問我,道長榄融,這世上最難降的妖魔是什么参淫? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮愧杯,結(jié)果婚禮上涎才,老公的妹妹穿的比我還像新娘。我一直安慰自己力九,他們只是感情好耍铜,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著跌前,像睡著了一般棕兼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上抵乓,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天伴挚,我揣著相機與錄音,去河邊找鬼灾炭。 笑死茎芋,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的蜈出。 我是一名探鬼主播田弥,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼铡原!你這毒婦竟也來了偷厦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤眷蜈,失蹤者是張志新(化名)和其女友劉穎沪哺,沒想到半個月后沈自,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酌儒,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年枯途,在試婚紗的時候發(fā)現(xiàn)自己被綠了忌怎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡酪夷,死狀恐怖榴啸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情晚岭,我是刑警寧澤鸥印,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響库说,放射性物質(zhì)發(fā)生泄漏狂鞋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一潜的、第九天 我趴在偏房一處隱蔽的房頂上張望骚揍。 院中可真熱鬧,春花似錦啰挪、人聲如沸信不。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抽活。三九已至,卻和暖如春锰什,著一層夾襖步出監(jiān)牢的瞬間酌壕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工歇由, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留卵牍,地道東北人。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓沦泌,卻偏偏與公主長得像糊昙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子谢谦,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

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

  • 最近看到好多人用到RAC,就簡單的看了一些別的大神文章,寫出來了一點 什么是RAC释牺? 幾乎每一篇介紹RAC的文章開...
    53a48e34aea2閱讀 1,173評論 1 8
  • 簡介 ReactiveCocoa(簡稱為RAC),RAC具有函數(shù)響應(yīng)式編程特性回挽,由Matt Diephouse開源...
    PHM閱讀 12,933評論 4 53
  • 前言 之前對RAC有了一個基本的認識没咙,了解了它的作用,以及RAC的運行機制千劈,我們知道只要是信號(RACSignal...
    大大盆子閱讀 4,498評論 0 11
  • 二祭刚、基本使用 #import// 導(dǎo)入頭文件 2-1、監(jiān)聽文本框使用 - (void)learnRACWithTe...
    清蘂翅膀的技術(shù)閱讀 369評論 0 0
  • “喂墙牌,肖涡驮,起來!你要接受問訊喜滨!”獄警打開了牢門捉捅,對著里面二十幾個囚犯吆喝。 一個染著栗色頭發(fā)虽风、眼神空洞的少年站了起...
    猜晴尋閱讀 299評論 0 1