乾貨集中營-ReactiveCocoa+RXSwift+MVVM

發表於2016-07-30

學習函式響應式程式設計已經接近兩個月的時間。說實話堅持下來實在不易。兩個月的時間看過近150篇博文,算下來啃下來一本千頁的技術書籍也差不多。不過隨著知識面的拓廣,學習起來也更加順利。本篇文章主要整理下自己收集的學習路線。其中包括了函數語言程式設計的思想,ReactiveCocoa2.x(主要是Objective-C部分的函式響應式程式設計框架),ReactiveCocoa4.x(擴充了Swift部分的支援),RXSwift(ReactiveX系列),加上函數語言程式設計對MVVM架構的幫助和影響。

寫在之前

這篇文章中不適合新手,沒有碼過2年業務的程式設計師我覺得可以瞭解下,不一定非要學習使用這個,因為你的經驗往往不足,在學習之後可能覺得自己能駕馭(要上天),但是隨著業務的複雜度上升,類似RAC的重量級框架帶來的副作用,除錯的困難性等會讓你後悔莫及。

物件導向程式設計是一個被大眾易於接受的方式,也就意味著更容易協同工作。函式響應式程式設計雖然不是一個新的話題,但是引入iOS專案實際開發還是要抱謹慎態度,畢竟學習函數語言程式設計的路線還是比較陡峭,這就意味者在團隊開發中,需要斟酌如何引用,如何培養新手,如何控制對框架的不良使用在專案中蔓延。

MVC是一個非常成熟的架構,在業務開始複雜的時候,合理的將網路請求,資料持久化等相關與控制器耦合不嚴重的公共抽取出來,足夠滿足日常開發需求。 對MVVM的理解的差異性也會寫出讓團隊成員寫出截然不同的風格。

說了這麼多廢話,其實是想表達,如果想在專案中使用要謹慎,謹慎 ,再謹慎,不過我們可以從其中學習到很多以前我們從來沒思考過的問題,甚至是一種全新的思維方式,有時候一些巧妙的實現,會讓你感嘆到電腦科學的神奇,也可以在你跳槽的時候成為你的加分項。

知識必備

需要你對Objective-C,block有比較清晰的瞭解,由於後面部分程式碼是由Swift實現,建議你掌握Swift,(由於Swift的特性,對於函數語言程式設計更容易實現,也更好理解,畢竟你看寫博文的作者幾乎每個都掌握的,所以去學習吧。),如果你用過Swift的高階函式,map,FlatMap,reduce,Filter等,會更加容易理解。

思想的建立

這部份主要奠定自己的函式式思想的建立,對函式(閉包,block)作為一等公民有新的理解。

這一部分可能學習的時間最久,需要的知識面也可能更廣,也最容易讓人放棄,因為你不知道你花了大把時間學習的是什麼(jb玩意)。

不過堅持下來,你將會更加理解函數語言程式設計,在學習接下來的ReactiveCocoa和RXSwift的時候只是把思想程式碼化。

首先來篇自己寫的

本文讓你對如何實現鏈式程式設計有個簡單的認識。文中包括了Objective-C和Swift兩個版本。

來自Mattt Thompson釋出在 NShipster讓你對引入RAC這類FRP(Functional Reactive Programming)框架對程式設計正規化的改變有個直觀的印象。

來自蘑菇街的limboy解釋下RAC和FRP的關係。

簡書上看到的文章,從最基本的Demo開始。

在這裡直接推薦了兩篇使用的文章。貌似會比較突然,但是作者覺得,Talk is cheap ,show me the code.(別裝逼了,亮程式碼吧) 思想總歸是要用程式碼來實現的,這部份內容偏實用,預計需要一週的時間才能掌握的差不多,可能你在學習的過程中,會遺忘,沒關係,思想的建立是一步一步的,學習這些程式碼還是為了更好的建立思想(我也沒指望你一遍掌握RAC),至於程式碼這篇文章,反正你是要看好幾遍的,第一次忘了就忘了。

之前的文章都是 functional Programming,和reactive programming,這裡偶然看到一篇響應式程式設計思想入門,強烈推薦。

這篇文章中講到了RAC自帶的debug外掛,在學習RAC過程中的實踐,以及一些技術博文連結。


在學習過程中我們可能經常會聽見一些比較函式式風格的名詞,比如monad,functor等,學到這裡我找到了另外比較好的資料。

  1. 函式式 Swift
  2. Functor、Applicative 和 Monad
  3. Swift Functors, Applicatives, and Monads in Pictures英文版
  4. Functors, Applicatives, And Monads In Pictures英文版

第一本書籍可能花費的時間很長,不過這本書也是最有深度的,可以從中學到更多函式式的思想。

ReactiveCocoa2.x

非常不錯的RAC入門教程

  1. ReactiveCocoa入門教程——第一部分對應的英文版
  2. ReactiveCocoa入門教程——第二部分 對應的英文版

來自sunnyxx的博文。

  1. Reactive Cocoa Tutorial [1] = 神奇的Macros
  2. Reactive Cocoa Tutorial [2] = 百變RACStream
  3. Reactive Cocoa Tutorial [3] = RACSignal的巧克力工廠
  4. Reactive Cocoa Tutorial [4] = 只取所需的Filters

學了這麼多來一篇RAC結構分享的文章


用了這麼久的RAC,你可能不止一次聽到冷熱訊號,也可能沒有意識到有些什麼是不對的,這裡給出來自美團的對冷熱訊號的分析。

  1. RACSignal的Subscription深入分析 – 美團點評技術團隊
  2. 細說ReactiveCocoa的冷訊號與熱訊號(一)
  3. 細說ReactiveCocoa的冷訊號與熱訊號(二):為什麼要區分冷熱訊號
  4. 細說ReactiveCocoa的冷訊號與熱訊號(三):怎麼處理冷訊號與熱訊號

美團博文最後給出了一個冷熱訊號可以轉換的方法,但是沒有講清楚,這裡有篇外國博文作為補充。


這裡補充一篇對RAC的概述


RAC專案實戰

  1. ReactiveCocoa2實戰
  2. 這樣好用的ReactiveCocoa,根本停不下來
  3. iOS開發下的函式響應式程式設計

如果你認認真真的學習到了這裡,想必以及有了不錯的進步,接下來我們可以看下RAC的原始碼實現了,看下這個龐然大物是如何實現這些神奇的功能的。

  1. RAC核心元素與訊號流
  2. 剖析@weakify 和 @strongify
  3. ReactiveCocoa原始碼閱讀之前序
  4. ReactiveCocoa原始碼閱讀之RACSignal(一)
  5. ReactiveCocoa原始碼閱讀之RACSignal(二)
  6. ReactiveCocoa原始碼閱讀之bind函式
  7. ReactiveCocoa原始碼閱讀之攻略flatten
  8. ReactiveCocoa原始碼閱讀之switchToLatest/combineLatestWith
  9. ReactiveCocoa原始碼閱讀之RACScheduler

MVVM With ReactiveCocoa

這部份主要講了RAC在MVVM中的表現,以及如何利用RAC在MVVM中做資料繫結這項核心操作。

  1. MVVM與ReactiveCocoa的運用(Part1)
  2. MVVM Tutorial with ReactiveCocoa: Part 1/2
  3. MVVM與ReactiveCocoa的運用(Part2)
  4. MVVM Tutorial with ReactiveCocoa: Part 2/2
  5. MVVM With ReactiveCocoa

ReactiveCocoa4.x

在學習這部份的時候發現沒有合適的入門教程,所以就自己摸索著翻譯了部分。可以參看

  1. ReactiveCocoa-Swift部分入門指南-Signal
  2. ReactiveCocoa-Swift部分入門指南-SignalProducer

一份Reactive4文件翻譯

  1. ReactiveCocoa 4 文件翻譯目錄

ReactiveCocoa4的詳細講解

  1. ReactiveCocoa 4 圖解之一——事件(Event)
  2. ReactiveCocoa 4 圖解之二——監聽器(Observer)
  3. ReactiveCocoa 4 圖解之三——存根(Disposable)
  4. 至於四作者並沒給出,估計是挖的坑忘記填
  5. ReactiveCocoa 4 圖解之五——訊號(Signal)
  6. ReactiveCocoa 4 圖解之六——訊號發生器(SignalProducer)

RXSwift

使用自帶教程入門

  1. RxSwift 入坑手冊 Part0 – 基礎概念
  2. RxSwift 入坑手冊 Part1 – 示例實戰

快速指南系列

  1. RxSwift快速指南(一)
  2. RxSwift快速指南(二)
  3. RxSwift快速指南(三)
  4. RxSwift快速指南(四)

速查表

文末給出了我自己整理的RAC和RXSwift速查表,畢竟誰也不可能記得住那麼多方法和小技巧的。

學習交流

這裡給出本人的iOS技術交流群,有興趣探討技術問題的小夥伴們可以加群交流

1群 173499350
2群 532084214

相關文章