關(guān)于ReactiveCocoa
在我看來RAC完全顛覆了傳統(tǒng)的開發(fā)模式国瓮,使消息傳遞回調(diào)等機(jī)制復(fù)雜問題簡單化,初始化與回調(diào)放在一起匠楚,使整個(gè)邏輯很具條理化巍膘。
ReactiveCocoa結(jié)合了一些編程模式:
1.函數(shù)式編程:利用高階函數(shù)厂财,即將函數(shù)作為其它函數(shù)的參數(shù)芋簿。
2.響應(yīng)式編程:關(guān)注于數(shù)據(jù)流及變化的傳播。
基于以上兩點(diǎn)璃饱,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是一個(gè)放置用戶輸入驗(yàn)證邏輯谒撼,視圖顯示邏輯食寡,發(fā)起網(wǎng)絡(luò)請求和其他各種各樣代碼的好地方。 ViewModel不要引用UIKit廓潜。 展示邏輯放在了ViewModel中抵皱,比如Model的值映射到一個(gè)格式化字符串善榛。實(shí)際上就是把原來ViewController做的一些事情放到了ViewModel中進(jìn)行,為ViewController減負(fù)呻畸。
在我看來移盆,使用架構(gòu)的時(shí)候要考慮到頁面的復(fù)雜情況,不要為了架構(gòu)而去架構(gòu)伤为。比如頁面邏輯比較簡單咒循,只是現(xiàn)實(shí)一個(gè)列表的邏輯,MVC就足矣绞愚。沒必要使用相對復(fù)雜的邏輯如MVVM或MVP叙甸。
關(guān)于MVVM+RAC
- ReactiveCocoa所扮演的角色:進(jìn)行ViewModel連接"粘合"工作。
1.例如在ViewController中給ViewModel的某個(gè)屬性綁定信號位衩,實(shí)時(shí)監(jiān)聽屬性的變化蚁署。每當(dāng)屬性發(fā)生變化,ViewModel中就會發(fā)生一個(gè)信號出來蚂四,ViewController中對應(yīng)的屬性訂閱這個(gè)信號光戈,在訂閱到這個(gè)信號的回調(diào)中執(zhí)行后面的邏輯。
2.利用RACCommand執(zhí)行execute方法來返回一個(gè)signal遂赠,訂閱這個(gè)signal久妆,這個(gè)signal中可以利用 initWithSignalBlock方法返回一個(gè)經(jīng)過處理的signal,比如要把網(wǎng)絡(luò)請求的數(shù)據(jù)返回并且解析成模型數(shù)組跷睦,都可以放在這個(gè)block中進(jìn)行處理筷弦。
實(shí)踐筆記
我在我的Github中寫了一個(gè)demo,其中基本涵蓋了RAC的基礎(chǔ)用法以及RAC+MVVM的實(shí)際應(yīng)用抑诸。希望感興趣的童鞋可以star一下烂琴,鼓勵(lì)一下。MVVM+RAC DEMO
參考鏈接
http://www.raywenderlich.com/62699/reactivecocoa-tutorial-pt1
http://www.raywenderlich.com/74106/mvvm-tutorial-with-reactivecocoa-part-1
http://www.reibang.com/p/e10e5ca413b7