函數響應式編程
ReactiveCoCoa是iOS中實踐函數響應式編程的利器。
函數式編程的特點是:
數據結構比較少,鼓勵函數的重用,通過組合不同的函數行程高階函數來滿足需求
面向對象通過封裝不確定因素來使得代碼被人理解,而函數式編程通過減少不確定因素來使得代碼被人理解
函數式的架構都是基於值不可變無副作用這個特點。
響應式編程特點是:
面向數據流和變化傳播的編程范式
a=b+c, a的值隨著b和c的更新而更新,就像Excel一樣
可以顯示的使用箭頭來表示數據流向
圖解RAC
ReactiveCocoa的源碼閱讀起來相對其他開源代碼來說更不容易,因為需要很多函數式編程的思維。我喜歡把難以理解的概念在腦中用圖構思出來,所以這篇文章將用圖片來描述我腦中的RAC思想。
RACSigal
RACSigal是RAC中的一個重要的類,如果按照黑盒的理解,RACSigal是個魔法一般的箱子,它可以把傳送給它的數據在箱子裡面經過各種操作變換成另一種東西,然後再傳遞給下一個箱子。而它可以變換成好多東西,可以是一個數字,也可以是一個新的箱子(RACSignal)。
subcribe
(RACDisposable *)subscribe:(id)subscriber;
subscribe是訂閱者向RACSigal建立起了訂閱關系,通過一條虛線來表示訂閱,同一個箱子可能會和多個訂閱者連接,當箱子裡面有值傳出的時候,會向所有訂閱者發送值。
map
map是箱子裡面那坨亂七八糟的線,魔法一樣地把輸入到箱子裡面的值變成另一個值,再包裝成新的箱子,所有訂閱這個新箱子的訂閱者都將接受到這個新值。
flattenMap
flattenMap是RAC中非常多operator的基礎函數。flattenMap把傳入的值轉變成一個個新的箱子,然後把這些箱子拆箱,再把值輸出給訂閱者。