**推薦:ReactiveCocoa和MVVM專題,匯聚一些優(yōu)秀相關(guān)博客 **

ReactiveCocoa為事件定義了一個(gè)標(biāo)準(zhǔn)接口,從而可以使用一些基本工具來更容易的連接、過濾和組合。如果你對(duì)上面說的還比較疑惑,那還是繼續(xù)往下看吧。
一 )函數(shù)響應(yīng)式編程名稱的由來
ReactiveCocoa結(jié)合了幾種編程風(fēng)格:
- 函數(shù)式編程(Functional Programming):使用高階函數(shù),例如函數(shù)用其他函數(shù)作為參數(shù).
- 響應(yīng)式編程(Reactive Programming):關(guān)注于數(shù)據(jù)流和變化傳播。
所以,你可能聽說過ReactiveCocoa被描述為函數(shù)響應(yīng)式編程(FRP)框架。
二 )ReactiveCocoa作用
在我們iOS開發(fā)過程中,當(dāng)某些事件響應(yīng)的時(shí)候,需要處理某些業(yè)務(wù)邏輯,這些事件都用不同的方式來處理。比如按鈕的點(diǎn)擊使用action,ScrollView滾動(dòng)使用delegate,屬性值改變使用KVO等系統(tǒng)提供的方式。其實(shí)這些事件,都可以通過RAC處理ReactiveCocoa為事件提供了很多處理方法,而且利用RAC處理事件很方便,可以把要處理的事情,和監(jiān)聽的事情的代碼放在一起,這樣非常方便我們管理,就不需要跳到對(duì)應(yīng)的方法里。非常符合我們開發(fā)中高聚合,低耦合的思想。
三) 信號(hào)的邏輯圖

核心概念是RACSignal,相當(dāng)于一個(gè)信號(hào)管道,接收信號(hào)源的信號(hào),將信號(hào)依次發(fā)送給
四 ) RAC 和MVVM 結(jié)合使用圖

五 RAC 簡單實(shí)用二十例
ReactiveCocoa簡單使用20例 超級(jí)值得一看和嘗試
六 ) ReactiveCocoa常見類。
學(xué)習(xí)框架首要之處:個(gè)人認(rèn)為先要搞清楚框架中常用的類,在RAC中最核心的類RACSiganl,搞定這個(gè)類就能ReactiveCocoa開發(fā)了。
6.1RACSiganl
信號(hào)類,一般表示將來有數(shù)據(jù)傳遞,只要有數(shù)據(jù)改變,信號(hào)內(nèi)部接收到數(shù)據(jù),就會(huì)馬上發(fā)出數(shù)據(jù)。注意信號(hào)類(RACSiganl),只是表示當(dāng)數(shù)據(jù)改變時(shí),信號(hào)內(nèi)部會(huì)發(fā)出數(shù)據(jù),它本身不具備發(fā)送信號(hào)的能力,而是交給內(nèi)部一個(gè)訂閱者去發(fā)出。
默認(rèn)一個(gè)信號(hào)都是冷信號(hào),也就是值改變了,也不會(huì)觸發(fā),只有訂閱了這個(gè)信號(hào),這個(gè)信號(hào)才會(huì)變?yōu)?strong>熱信號(hào),值改變了才會(huì)觸發(fā)。
如何訂閱信號(hào):調(diào)用信號(hào)RACSignal的subscribeNext就能訂閱。
6.2RACSubscriber
:表示訂閱者的意思,用于發(fā)送信號(hào),這是一個(gè)協(xié)議,不是一個(gè)類,只要遵守這個(gè)協(xié)議,并且實(shí)現(xiàn)方法才能成為訂閱者。通過create創(chuàng)建的信號(hào),都有一個(gè)訂閱者,幫助他發(fā)送數(shù)據(jù)。
6.3RACDisposable
用于取消訂閱或者清理資源,當(dāng)信號(hào)發(fā)送完成或者發(fā)送錯(cuò)誤的時(shí)候,就會(huì)自動(dòng)觸發(fā)它。
使用場景
:不想監(jiān)聽某個(gè)信號(hào)時(shí),可以通過它主動(dòng)取消訂閱信號(hào)。
6.4RACSubject
:RACSubject:信號(hào)提供者,自己可以充當(dāng)信號(hào),又能發(fā)送信號(hào)。
6.6RACTuple
元組類,類似NSArray,用來包裝值.
6.7RACSequence
:RAC中的集合類,用于代替NSArray,NSDictionary,可以使用它來快速遍歷數(shù)組和字典。
6.8RACCommand
RAC中用于處理事件的類,可以把事件如何處理,事件中的數(shù)據(jù)如何傳遞,包裝到這個(gè)類中,他可以很方便的監(jiān)控事件的執(zhí)行過程。
使用場景
監(jiān)聽按鈕點(diǎn)擊,網(wǎng)絡(luò)請求
6.9RACMulticastConnection
用于當(dāng)一個(gè)信號(hào),被多次訂閱時(shí),為了保證創(chuàng)建信號(hào)時(shí),避免多次調(diào)用創(chuàng)建信號(hào)中的block,造成副作用,可以使用這個(gè)類處理。
6.10 RACScheduler
RAC中的隊(duì)列,用GCD封裝的。
6.11 RACUnit
表?stream不包含有意義的值,也就是看到這個(gè),可以直接理解為nil.
6.12RACEvent
把數(shù)據(jù)包裝成信號(hào)事件(signal event)。它主要通過RACSignal的-materialize來使用,然并卵。
七).ReactiveCocoa開發(fā)中常見用法。
7.1 代替代理:
rac_signalForSelector 用于替代代理。
7.2 代替KVO :
rac_valuesAndChangesForKeyPath 用于監(jiān)聽某個(gè)對(duì)象的屬性改變。
7.3 監(jiān)聽事件:
rac_signalForControlEvents 用于監(jiān)聽某個(gè)事件。
7.4 代替通知:
rac_addObserverForName 用于監(jiān)聽某個(gè)通知。
7.5 監(jiān)聽文本框文字改變:
rac_textSignal 只要文本框發(fā)出改變就會(huì)發(fā)出這個(gè)信號(hào)。
7.6 處理當(dāng)界面有多次請求時(shí),需要都獲取到數(shù)據(jù)時(shí),才能展示界面
八).ReactiveCocoa常見宏。
8.1RAC
(TARGET, [KEYPATH, [NIL_VALUE]])用于給某個(gè)對(duì)象的某個(gè)屬性綁定。// 只要文本框文字改變,就會(huì)修改label的文字 RAC(self.labelView,text) = _textField.rac_textSignal;
8.2RACObserve(self, name)
:監(jiān)聽某個(gè)對(duì)象的某個(gè)屬性,返回的是信號(hào)。
[RACObserve(self.view, center) subscribeNext:^(id x) { NSLog(@"%@",x); }];
8.3@weakify(Obj)和@strongify(Obj)
,一般兩個(gè)都是配套使用,在主頭文件(ReactiveCocoa.h
)中并沒有導(dǎo)入,需要自己手動(dòng)導(dǎo)入,RACEXTScope.h
才可以使用。但是每次導(dǎo)入都非常麻煩,只需要在主頭文件自己導(dǎo)入就好了。
8.4RACTuplePack
:把數(shù)據(jù)包裝成RACTuple(元組類)
// 把參數(shù)中的數(shù)據(jù)包裝成元組 RACTuple *tuple = RACTuplePack(@10,@20);
8.5RACTupleUnpack
:把RACTuple(元組類)解包成對(duì)應(yīng)的數(shù)據(jù)。
// 把參數(shù)中的數(shù)據(jù)包裝成元組 RACTuple *tuple = RACTuplePack(@"xmg",@20); // 解包元組,會(huì)把元組的值,按順序給參數(shù)里面的變量賦值 // name = @"xmg" age = @20 RACTupleUnpack(NSString *name,NSNumber *age) = tuple;
參考資料
ReactiveCocoa之基礎(chǔ)篇
ReactiveCocoa之進(jìn)階篇
函數(shù)響應(yīng)式編程
- 作者開發(fā)經(jīng)驗(yàn)總結(jié)的文章推薦,持續(xù)更新學(xué)習(xí)心得筆記
Runtime 10種用法(沒有比這更全的了)
成為iOS頂尖高手,你必須來這里(這里有最好的開源項(xiàng)目和文章)
iOS逆向Reveal查看任意app 的界面
JSPatch (實(shí)時(shí)修復(fù)App Store bug)學(xué)習(xí)(一)
iOS 高級(jí)工程師是怎么進(jìn)階的(補(bǔ)充版20+點(diǎn))
擴(kuò)大按鈕(UIButton)點(diǎn)擊范圍(隨意方向擴(kuò)展哦)
最簡單的免證書真機(jī)調(diào)試(原創(chuàng))
通過分析微信app,學(xué)學(xué)如何使用@2x,@3x圖片
TableView之MVVM與MVC之對(duì)比
使用MVVM減少控制器代碼實(shí)戰(zhàn)(減少56%)
ReactiveCocoa添加cocoapods 配置圖文教程及坑總結(jié)