關(guān)于ReactiveCocoa
在我看來RAC完全顛覆了傳統(tǒng)的開發(fā)模式,使消息傳遞回調(diào)等機(jī)制復(fù)雜問題簡單化,初始化與回調(diào)放在一起,使整個邏輯很具條理化。
ReactiveCocoa結(jié)合了一些編程模式:
1.函數(shù)式編程:利用高階函數(shù),即將函數(shù)作為其它函數(shù)的參數(shù)。
2.響應(yīng)式編程:關(guān)注于數(shù)據(jù)流及變化的傳播。
基于以上兩點,ReactiveCocoa被當(dāng)成是函數(shù)響應(yīng)編程(Functional Reactive Programming, FRP)框架。
Github地址https://github.com/ReactiveCocoa/ReactiveCocoa
關(guān)于MVVM
在MVVM中View和ViewController正式聯(lián)系在一起。View仍然不能直接引用模型Model,當(dāng)然Controller也不能。 相反他們引用視圖模型ViewModel。 ViewModel是一個放置用戶輸入驗證邏輯,視圖顯示邏輯,發(fā)起網(wǎng)絡(luò)請求和其他各種各樣代碼的好地方。 ViewModel不要引用UIKit。 展示邏輯放在了ViewModel中,比如Model的值映射到一個格式化字符串。實際上就是把原來ViewController做的一些事情放到了ViewModel中進(jìn)行,為ViewController減負(fù)。
在我看來,使用架構(gòu)的時候要考慮到頁面的復(fù)雜情況,不要為了架構(gòu)而去架構(gòu)。比如頁面邏輯比較簡單,只是現(xiàn)實一個列表的邏輯,MVC就足矣。沒必要使用相對復(fù)雜的邏輯如MVVM或MVP。
關(guān)于MVVM+RAC
- ReactiveCocoa所扮演的角色:進(jìn)行ViewModel連接"粘合"工作。
1.例如在ViewController中給ViewModel的某個屬性綁定信號,實時監(jiān)聽屬性的變化。每當(dāng)屬性發(fā)生變化,ViewModel中就會發(fā)生一個信號出來,ViewController中對應(yīng)的屬性訂閱這個信號,在訂閱到這個信號的回調(diào)中執(zhí)行后面的邏輯。
2.利用RACCommand執(zhí)行execute方法來返回一個signal,訂閱這個signal,這個signal中可以利用 initWithSignalBlock方法返回一個經(jīng)過處理的signal,比如要把網(wǎng)絡(luò)請求的數(shù)據(jù)返回并且解析成模型數(shù)組,都可以放在這個block中進(jìn)行處理。
實踐筆記
我在我的Github中寫了一個demo,其中基本涵蓋了RAC的基礎(chǔ)用法以及RAC+MVVM的實際應(yīng)用。希望感興趣的童鞋可以star一下,鼓勵一下。MVVM+RAC DEMO
參考鏈接
http://www.raywenderlich.com/62699/reactivecocoa-tutorial-pt1
http://www.raywenderlich.com/74106/mvvm-tutorial-with-reactivecocoa-part-1
http://www.lxweimin.com/p/e10e5ca413b7