什么是ReactiveCocoa?
ReactiveCocoa(其簡稱為RAC)是由Github 開源的一個應(yīng)用于iOS和OS X開發(fā)的新框架。RAC具有函數(shù)式編程(FP)和響應(yīng)式編程(RP)的特性。它主要吸取了.Net的 Reactive Extensions的設(shè)計和實現(xiàn)。
函數(shù)式編程概念
或許你不知道函數(shù)式編程的概念,作為iOS開發(fā)者你應(yīng)該使用過,如下:
make.centerY.equalTo(self.view).offset(100);
函數(shù)式編程總結(jié):
如果想再去調(diào)用別的方法,那么就需要返回一個對象;
如果想用()去執(zhí)行,那么需要返回一個block;
如果想讓返回的block再調(diào)用對象的方法,那么這個block就需要返回一個對象(即返回值為一個對象的block)。
響應(yīng)式編程的概念
在網(wǎng)上流傳一個非常經(jīng)典的解釋`響應(yīng)式編程的概念`
在程序開發(fā)中:
a = b + c
賦值之后 b 或者 c 的值變化后,a 的值不會跟著變化
響應(yīng)式編程,目標(biāo)就是,如果 b 或者 c 的數(shù)值發(fā)生變化,a 的數(shù)值會同時發(fā)生變化;
關(guān)于ReactiveCocoa的比喻
“能夠把信號想象成水龍頭,僅僅只是里面不是水,而是玻璃球(value),直徑跟水管的內(nèi)徑一樣,這樣就能保證玻璃球是依次排列。不會出現(xiàn)并排的情況(數(shù)據(jù)都是線性處理的,不會出現(xiàn)并發(fā)情況)。水龍頭的開關(guān)默認(rèn)是關(guān)的。除非有了接收方(subscriber),才會打開。
這樣僅僅要有新的玻璃球進來,就會自己主動傳送給接收方。
能夠在水龍頭上加一個過濾嘴(filter)。不符合的不讓通過,也能夠加一個修改裝置,把球改變成符合自己的需求(map)。
也能夠把多個水龍頭合并成一個新的水龍頭(combineLatest:reduce:),這樣僅僅要當(dāng)中的一個水龍頭有玻璃球出來,這個新合并的水龍頭就會得到這個球。
ReactiveCocoa 主要解決了以下這些問題:
- UI數(shù)據(jù)綁定
UI控件通常需要綁定一個事件,RAC可以很方便的綁定任何數(shù)據(jù)流到控件上。
- 用戶交互事件綁定
RAC為可交互的UI控件提供了一系列能發(fā)送Signal信號的方法。這些數(shù)據(jù)流會在用戶交互中相互傳遞。
- 消息傳遞機制的大統(tǒng)一
OC中編程原來消息傳遞機制有以下幾種:Delegate,Block Callback,Target-Action,Timers,KVO,objc上有一篇關(guān)于OC中這5種消息傳遞方式改如何選擇的文章Communication Patterns,推薦大家閱讀?,F(xiàn)在有了RAC之后,以上這5種方式都可以統(tǒng)一用RAC來處理。