ReactiveCocoa - swift 學習筆記(二)初識Signal

weixin_33866037發表於2016-07-28

明天的我會感謝今天努力過的自己

新增好了ReactiveCocoa依賴,就該來學習如何使用它了。

檢視Signal.xcplaygroundpage的輸出內容

根據官方文件的描述,找到最下方的Playground

  1. 下載ReactiveCocoa倉庫
git clone https://github.com/ReactiveCocoa/ReactiveCocoa.git
  1. 檢索專案依賴
    在專案根目錄下執行
    2.1 第一種方法
script/bootstrap

2.2 第二種方法(安裝了carthage)

carthage checkout
  1. 利用ReactiveCocoa.xcworkspace開啟下載好的ReactiveCocoa專案

  2. 分別選中ReactiveCocoa-Mac和Result-Mac,cmd + b進行build


    2526255-5dfb46f21fa45dc4.png
    選中ReactiveCocoa-Mac

    2526255-550aa85f74926a48.png
    選中Result-Mac
  3. 開啟ReactiveCocoa.playground,最終形成的目錄結構如下


    2526255-f5abd7da63ef5f8a.png
    ReactiveCocoa專案目錄結構
  4. 開啟Debug控制檯


    2526255-5126cb4756e39b70.png
    顯示Debug控制檯
  5. 點選目錄中的Signal,看到控制檯輸出了很多列印的內容

--- Subscription ---

Subscriber 1 subscribes to the signal
Send value `10` on the signal
Subscriber 1 received 10
Subscriber 2 subscribes to the signal
Send value `20` on the signal
Subscriber 1 received 20
Subscriber 2 received 20
...
Signal是什麼?
  • 一個signal所代表的signal型別,是一系列能被觀察到的有時序的事件流。
  • Signal通常代表進行中的事件流,比如:通知、使用者輸入等。像一份工作被執行或者一份資料被接收,事件被傳遞給signal,並且被推送給所有的觀察者,所有的觀察者將會同時接收到這些事件。
  • 如果想要使用某個物件的事件,則必須成為該物件的signal的觀察者。觀察一個訊號不會有任何的副作用,可以這麼理解,signal是完全由signal生產者驅動的,並且是基於推送的,(消費者)觀察者不會對這些signal的生命週期有任何影響。當觀察一個訊號時,觀察者僅僅能夠估計事件的執行順序,這個事件的執行順序是由傳送給signal的順序決定的,而不能夠隨機訪問signal中的事件。
  • 能夠使用高階函式去操作signal,例如:filter、map、reduce,也可以同時操作多個signal,例如zip,這些高階函式僅僅只能在Next事件中生效。
  • 一個signal的生命週期就是由一系列的Next事件組成。最終將會由一個終結事件作為結尾,這個終結事件可能是Failed,Completed或者Interrupted(有且只有其中一個),終結事件沒有signal值,所以必須進行特殊處理。

這一篇基本上是翻譯官方的描述,下一篇起分析程式碼,估計不會這麼枯燥了

相關文章