在這裡將為大家介紹的是ReactiveSwift框架的相關介紹,具體代碼請看下文
最近項目不多,所以就研究了一下RxSwift和RAS,RAC以前項目中用過了,在這裡我就先簡單的介紹一下什麼是RAS。總述:在RAC 5.0這個版本,有了很大的改動,API已經重新命名。在和Swift相關的部分被抽調出來搞成了一個新的框架:ReactiveSwift,可見蘋果爸爸對小兒子的喜愛,要大力推廣swift了,而不僅僅是用於蘋果開發中。
改動部分:1. RACSignal 和 SignalProducer、 Signal2. RACCommand 和 Action3. RACScheduler 和 SchedulerType4. RACDisposable 和 Disposable
簡介:首先我們用cocoapod導入 pod 'ReactiveSwift'然後再項目裡導入頭文件import Resultimport 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.
多多關注本站,我們將為您收集更多的Android開發相關文章.
[db:作者簡介][db:原文翻譯及解析]【ReactiveSwift框架】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!