圖解ReactiveCocoa

ssrrxx111 8年前發布 | 10K 次閱讀 iOS開發 移動開發 ReactiveCocoa

ReactiveCoCoa是iOS中實踐函數響應式編程的利器。

函數式編程的特點是:

  • 數據結構比較少,鼓勵函數的重用,通過組合不同的函數行程高階函數來滿足需求
  • 面向對象通過封裝不確定因素來使得代碼被人理解,而函數式編程通過減少不確定因素來使得代碼被人理解
  • 函數式的架構都是基于值不可變無副作用這個特點。

響應式編程特點是:

  • 面向數據流和變化傳播的編程范式
  • a=b+c, a的值隨著b和c的更新而更新,就像Excel一樣
  • 可以顯示的使用箭頭來表示數據流向

    圖解RAC

    ReactiveCocoa的源碼閱讀起來相對其他開源代碼來說更不容易,因為需要很多函數式編程的思維。我喜歡把難以理解的概念在腦中用圖構思出來,所以這篇文章將用圖片來描述我腦中的RAC思想。

    RACSigal

    RACSigal是RAC中的一個重要的類,如果按照黑盒的理解,RACSigal是個魔法一般的箱子,它可以把傳送給它的數據在箱子里面經過各種操作變換成另一種東西,然后再傳遞給下一個箱子。而它可以變換成好多東西,可以是一個數字,也可以是一個新的箱子(RACSignal)。

    subcribe

    (RACDisposable *)subscribe:(id<RACSubscriber>)subscriber;
    subscribe是訂閱者向RACSigal建立起了訂閱關系,通過一條虛線來表示訂閱,同一個箱子可能會和多個訂閱者連接,當箱子里面有值傳出的時候,會向所有訂閱者發送值。

    map

    map是箱子里面那坨亂七八糟的線,魔法一樣地把輸入到箱子里面的值變成另一個值,再包裝成新的箱子,所有訂閱這個新箱子的訂閱者都將接受到這個新值。

    flattenMap

    flattenMap是RAC中非常多operator的基礎函數。flattenMap把傳入的值轉變成一個個新的箱子,然后把這些箱子拆箱,再把值輸出給訂閱者。

 

來自:http://scorpiolin.github.io/2016/08/06/ReactiveCocoa/

 

 本文由用戶 ssrrxx111 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!