ReactiveSwift架構,reactiveswift

來源:互聯網
上載者:User

ReactiveSwift架構,reactiveswift

最近項目不多,所以就研究了一下RxSwift和RAS,RAC以前項目中用過了,在這裡我就先簡單的介紹一下什麼是RAS。
總述:
在RAC 5.0這個版本,有了很大的改動,API已經重新命名。在和Swift相關的部分被抽調出來搞成了一個新的架構:ReactiveSwift,可見蘋果爸爸對小兒子的喜愛,要大力推廣swift了,而不僅僅是用於蘋果開發中。

改動部分:
1. RACSignal 和 SignalProducer、 Signal
2. RACCommand 和 Action
3. RACScheduler 和 SchedulerType
4. RACDisposable 和 Disposable

簡介:
首先我們用cocoapod匯入 pod 'ReactiveSwift'
然後再項目裡匯入標頭檔
import Result
import ReactiveSwift

如果你只匯入了 ReactiveSwift而沒有匯入Result,那你打NoError就會報錯,因為NoError 依賴於 Result

主要類型
1.事件(Events)
一個事件,被表示為一個 【Event】 類型,它表示一些事情發生了。在 ReactiveSwift中, 事件是通訊的核心。一個事件可能表示一個按鈕被按下了、從 API中接收到了一條資訊或是一次長時間操作的完成。在任何情況下,有一定意義的事情產生了事件,並通過 【訊號】 發送它們給了 [觀察者]。
Event
 是一個枚舉值,它可以表示為一個 值事件(value) 或者 三個終止操作的任意一個:
a. 值事件(value)可以從來源處提供一個值。
b. 失敗事件表示在訊號正常結束之前發生了錯誤。該事件被 ErrorType類型所參數化,這個類型表明事件允許出現失敗。但是如果失敗是不被允許的,事件將提供 NoError類型來阻止失敗。
c. 完成事件表明訊號成功地結束了,並且源處(source)不在發送其他任何值了。
d. 中止事件意味著操作可能成功也可能沒有成功。


2. 訊號(Signals)
一個訊號,被表示為一個 [Signal] 類型,是可以觀察的 事件 的一組序列。
訊號通常被用來表示進行中的 事件流(event streams),比如通知、使用者輸入等等。隨著工作的進行和資料被接受,事件基於訊號被發送,訊號能把事件推送給任何的觀察者。
所有的觀察者能同時看到事件。
使用者如果想擷取一個事件,就必須觀察一個訊號。觀察一個訊號不會造成任何的副作用。換言之,訊號完全是 生產者驅動的(producer-driven)和 基於推送的(push-based),並且消費者(觀察者)在它們的生命週期中不會有任何影響。在觀察訊號的時候,使用者只能用它們(事件)在訊號中被發送的順序相同的序列來評估它們。我們不能隨機的訪問訊號的值。
訊號可以通過應用原語[primitives]來控制它們,比如 filter、map和 reduce都是可以操作一個訊號的典型原語。值得注意的是,原語操作僅能對 值事件 進行操作。
在一個訊號的生命週期中,它可能有無數的 值事件,並且會以一個終止事件而結束(失敗事件、完成事件、中止事件的任意一個)。終止事件不能被包含在訊號的值中,它們必須被單獨處理。


3. 管道(Pipes)

一個管道,是被 Signal.pipe() 建立的,是一個能被手動控制的訊號。

這個方法返回一個訊號和觀察者。這個訊號能夠通過發送事件給觀察者的方式被控制。這對於串連 非RAC 的代碼是非常有用的。

舉個栗子,比如在 block 回呼函數中處理應用程式邏輯,這些塊能簡單地向觀察者發送事件。同時,題目也可以返回訊號,並隱藏回調的實現細節。

4. 訊號發生器(Signal Producers)
一個訊號發生器,可以被表示為一個 [SignalProducer]類型,它能建立訊號,並且會產生副作用。
它們能被用來表示一些操作或者任務,比如網路請求,在每次調用 start()時都將建立一個新的基本操作,並允許調用者去觀察結果。startWithSignal()變型可以訪問所產生的訊號,如果需要的話,允許它被觀察多次。
因為 start() 的行為,由相同發生器建立的訊號可能會有不同序列或版本的事件,也許流也是完全不同。與普通的訊號不同,在增加一個觀察者之前,它不會開始工作(不會產生事件),而且每增加一個額外的觀察者就會重新工作一遍。
開始一個訊號發生器會返回一個 [disposable],disposable被用於中止/關閉與產生的訊號相關的工作。
就像和訊號一樣,訊號發生器也能通過原語(primitives)被控制,比如 map、filter等等。每一個訊號原語都能使用 lift方法去操作訊號產生器。此外,這裡還有可以控制 when和 how的額外原語,比如 times。

5. 觀察者(Observers)
一個觀察者可以是任意東西,只要它正在等待或者即將等待訊號中的事件。在 RAC中,一個觀察者被表示成一個能接收 [Event]的 [Observer]。
觀察者是通過使用基於閉包的 Signal.observe或者是 SignalProducer.start方法隱式建立的。

6. 動作(Actions)
一個動作,被表示為 [Action] 類型。當動作在執行的時候,它可能產生0個或者多個輸出,也可能出現失敗。
動作對於在使用者互動中執行有副作用的工作時非常有用,比如按下一個按鈕。動作也會基於一個 [屬性] 變得自動不可用,這種不可用狀態能夠在 UI中通過禁用某些操作的方式被表示出來。

7. 屬性(Properties)
一個屬性,被表示為一個 [PropertyProtocol] 類型。它能儲存一個值,並能通知觀察者關於這個值得將來的變更。
一個屬性的當前值可能被包含在這個值的 getter裡面。產生器 getter 會返回一個 [訊號產生器] ,這個訊號產生器會發送屬性的當前值,這個值會隨著時間的推移而變化。 訊號 getter
 不僅僅會發送初始化值,也會隨著時間發送所有的改變。
<~ 操作可以被用來以用不同的方式綁定屬性。在任何情況下,目標都一定會成為繫結目標,它被表示為 [BingingTargetProtocol]。所有可變的屬性類型,都被表示為 [MutablePropertyProtocol],是內在的繫結目標。
property <~ signal: 將一個訊號綁定在一個屬性身上,更新這個屬性值的時候,訊號會發送出這個屬性的最新值。
property <~ producer: 啟動一個給定的訊號產生器,並將屬性的值綁定到訊號發送的最新值上。
property <~ otherProperty: 將一個屬性綁定在另一個屬性身上,所以一旦源屬性的值更新了,目標屬性的值也會隨之更新。
屬性提供了大量的事務操作,比如 map、combineLatest或者是 zip,這些操作與訊號和訊號產生器中的相似。

8. Disposables
一個 Disposable,會被表示成 [Disposable] 協議,是一個記憶體管理和取消的機制。當啟動一個訊號產生器的時候,會返回一個 disposable。disposable能取消已啟動的工作(比如幕後處理,網路請求等),清除所有臨時資源,然後用建立的特定訊號來發送一個最終的中止事件。觀察一個訊號也會返回一個 disposable。處理它將會阻止觀察者接受來自訊號的未來的事件,但它不會對訊號本身有任何影響。

9. 調度器(Schedulers)
一個調度器,會被表示成一個 [SchedulerProtocol]協議,它是一個串列的可執行隊列,這些隊列被用於執行工作或交付(傳遞)結果。訊號和訊號產生器能被命令在特定的調度器上傳遞程式。訊號產生器還能被用來在特定的調度器上開始它們的工作。調度器與 Grand Central Dispatch隊列相似,但是調度器支援取消操作(通過 [disposables]),並且始終按串列方式去執行。[ImmediateScheduler
] 是一個例外,該調度器不提供同步執行。這能協助避免死結,並且鼓勵用訊號和訊號產生器的原語操作去代替閉包。
調度器和 NSOperationQueue也有一定的相似,但是調度器不允許任務被重新安排或者依賴另外一個任務。

主要用法:
1.訊號的建立

不多說了直接上代碼

咯咯

下面是列印的結果


接下來我們建立一個熱訊號,看看是什麼結果,what?你說你不知道什麼是熱訊號,什麼是冷訊號。好吧

熱訊號是主動的,即使你沒有訂閱事件,它仍然會時刻推送。而冷訊號是被動的,只有當你訂閱的時候,它才會發送訊息。
熱訊號可以有多個訂閱者,是一對多,訊號可以與訂閱者共用資訊。而冷訊號只能一對一,當有不同的訂閱者,訊息會從新完整發送。

我們來看一下熱訊號吧,還是廢話不多說,代碼見真知


2.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.