學(xué)習(xí)

函數(shù)響應(yīng)式編程的理解:

程序: 接受輸入-經(jīng)過處理-轉(zhuǎn)換為輸出 構(gòu)成一個程序的生命周期. 一個程序的一個頁面可能會接受多次的輸入,具體表現(xiàn)在(點擊事件,鍵盤事件,搖晃事件,網(wǎng)絡(luò)請求事件等等)這些事件被傳入到應(yīng)用程序里面,經(jīng)過程序的混合處理,產(chǎn)生結(jié)果,這就是輸出.

輸出通常會改變應(yīng)用的UI。開關(guān)狀態(tài)變化、列表有了新的元素都是UI變化。也有可能讓磁盤上某個文件產(chǎn)生變化,或者產(chǎn)生一個API請求,這都是應(yīng)用的輸出。

但不像傳統(tǒng)的輸入輸出設(shè)計,應(yīng)用的輸入輸出可以產(chǎn)生很多次。應(yīng)用打開后,不只是一個簡單的 輸入→工作→輸出 就構(gòu)成了一個生命周期。應(yīng)用經(jīng)常有大量的輸入并基于這些輸入產(chǎn)生輸出.

一個簡單的列子 注冊頁面的輸入框和注冊按鈕是否可被點擊:

傳統(tǒng)寫法:



傳統(tǒng)范式的樣例中,邏輯被放在了很多方法里,零碎地擺放在view controller里,通過到處散布到delegate里的self.createButton.enabled = [self isFormValid];方法在頁面的生命周期中被調(diào)用。

reactivecocoa 寫法:



所有對于判斷表單輸入是否合法的邏輯都被整合為一串邏輯了。每次不論哪個輸入框被修改了,用戶的輸入都會被reduce成一個布爾值,然后就可以自動來控制注冊按鈕的可用狀態(tài)了。

ReactiveCocoa由兩大主要部分組成:signals(RACSignal) 和sequences(RACSequence)。

signal 和 sequence 都是streams,他們共享很多相同的方法。ReactiveCocoa在功能上做了語義豐富、一致性強的一致性設(shè)計:signal是push驅(qū)動的stream,sequence是pull驅(qū)動的stream。

RACSignal

異步控制或事件驅(qū)動的數(shù)據(jù)源:Cocoa編程中大多數(shù)時候會關(guān)注用戶事件或應(yīng)用狀態(tài)改變產(chǎn)生的響應(yīng)。

鏈?zhǔn)揭詠聿僮?/b>:網(wǎng)絡(luò)請求是最常見的依賴性樣例,前一個對server的請求完成后,下一個請求才能構(gòu)建。

并行獨立動作:獨立的數(shù)據(jù)集要并行處理,隨后還要把他們合并成一個最終結(jié)果。這在Cocoa中很常見,特別是涉及到同步動作時。

Signal會觸發(fā)它們的subscriber三種不同類型的事件:

下一個事件從stream中提供一個新值。不像Cocoa集合,它是完全可用的,甚至一個signal可以包含nil。

錯誤事件會在一個signal結(jié)束之前被標(biāo)示出來這里有一個錯誤。這種事件可能包含一個NSError對象來標(biāo)示什么發(fā)生了錯誤。錯誤必須被特殊處理——錯誤不會被包含在stream的值里面。

完成事件標(biāo)示signal成功結(jié)束,不會再有新的值會被加入到stream當(dāng)中。完成事件也必須被單獨控制——它不會出現(xiàn)在stream的值里面。

一個signal的生命由很多下一個(next)事件和一個錯誤(error)或完成(completed)事件組成(后兩者不同時出現(xiàn))。


RACSequence

簡化集合轉(zhuǎn)換:你會痛苦地發(fā)現(xiàn)Foundation庫中沒有類似map和filter、fold/reduce等高級函數(shù)。

Sequence是一種集合,很像NSArray。但和數(shù)組不同的是,一個sequence里的值默認是延遲加載的(只有需要的時候才加載),這樣的話如果sequence只有一部分被用到,那么這種機制就會提高性能。像Cocoa的集合類型一樣,sequence不接受nil值。

RACSequence允許任意Cocoa集合在統(tǒng)一且顯式地進行操作


http://www.itdecent.cn/p/87ef6720a096?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容