本文介紹ios框架ReactiveCocoa,這個(gè)框架最大的特點(diǎn)就是:直觀,靈活泡一。直觀的代碼容易編寫(xiě)觅廓,閱讀和維護(hù),能夠很好的適應(yīng)需求的變更帖蔓,最重要的是高效瞳脓。
什么是ReactiveCocoa
ReactiveCocoa(簡(jiǎn)稱(chēng)RAC)是由github上開(kāi)源的一個(gè)ios框架,目前最新版本已經(jīng)支持swift語(yǔ)言钝吮。RAC具有函數(shù)式編程和響應(yīng)式編程的特性板辽。
是ios平臺(tái)對(duì)FRP的實(shí)現(xiàn),F(xiàn)RP的核心思想是信號(hào)傳遞耳标,信號(hào)在ReactiveCocoa(RAC)中主要是通過(guò)RACSignal來(lái)表示邑跪,信號(hào)數(shù)據(jù)流,可以綁定和傳遞砸琅。
可以把信號(hào)想象成水龍頭轴踱,只不過(guò)里面不是水,而是玻璃球(value)诱篷,直徑跟水管的內(nèi)徑一樣,這樣就能保證玻璃球是依次排列棕所,不會(huì)出現(xiàn)并排的情況(數(shù)據(jù)都是線(xiàn)性處理的,
不會(huì)出現(xiàn)并發(fā)情況)迎吵。水龍頭的開(kāi)關(guān)默認(rèn)是關(guān)的钓觉,除非有了接收方(subscriber),才會(huì)打開(kāi)荡灾。這樣只要有新的玻璃球進(jìn)來(lái)瞬铸,就會(huì)自動(dòng)傳送給接收方∮担可以在水龍頭上加一個(gè)過(guò)濾嘴(filter),不符合的不讓通過(guò)截粗,也可以加一個(gè)改動(dòng)裝置鸵隧,把球改變成符合自己的需求(map)。也可以把多個(gè)水龍頭合并成一個(gè)新的水龍頭(combineLatest:reduce:)珊蟀,這樣只要其中的一個(gè)水龍頭有玻璃球出來(lái)育灸,這個(gè)新合并的水龍頭就會(huì)得到這個(gè)球。
為什么要用ReactiveCocoa
native app有很長(zhǎng)一段時(shí)間都是在等待事件發(fā)生磅崭,然后響應(yīng)事件瓦哎,比如等待網(wǎng)絡(luò)請(qǐng)求的返回柔逼,用戶(hù)交互完成,等待某些狀態(tài)改變等等羡铲。等待這些事件完成之后在做進(jìn)一步的處理,ios中通常使用Notification,delegate,block,KVO等來(lái)實(shí)現(xiàn)扑媚,常常不知道使用哪一種合適雷恃,有時(shí)需要等待幾個(gè)事件都完成之后再進(jìn)行下一步操作,這個(gè)時(shí)候就需要定義多個(gè)狀態(tài)變量旬痹,隨著需求的復(fù)雜度增加讨越,定義的狀態(tài)變量增多,代碼維護(hù)和可讀性大大降低把跨。
總結(jié)一句就是:ReactiveCocoa就是以一種統(tǒng)一的方式實(shí)現(xiàn)了Notification,delegate,block,KVO,UI Event, NetWork ,Arync Task功能,它們?cè)诒举|(zhì)上就是值的變化着逐。
初級(jí)教程
第一部分:Reactive入門(mén)教程---第一階段
第二部分:Reactive入門(mén)教程---第二階段
進(jìn)階教程
http://www.cocoachina.com/ios/20150702/12302.html
http://blog.csdn.net/xdrt81y/article/details/30624469
https://tech.meituan.com/RACSignalSubscription.html
http://www.cocoachina.com/industry/20140621/8905.html
http://www.cocoachina.com/industry/20140609/8737.html
http://www.cocoachina.com/industry/20140115/7702.html
http://nshipster.com/reactivecocoa/
https://www.bignerdranch.com/blog/data-driven-ios-development-reactivecocoa/
https://www.teehanlax.com/blog/getting-started-with-reactivecocoa/
http://nshipster.cn/reactivecocoa/
http://www.cocoachina.com/ios/20150526/11930.html
書(shū)籍推薦
《Functional Reactive Programming on iOS》