Chapter 1: Hello RxSwift

RxSwift is a library for composing asynchronous and event-based code by using observable sequences and functional style operators, allowing for parameterized execution via schedulers.

RxSwift, in its essence, simplifies developing asynchronous programs by allowing your code to react to new data and process it in sequential, isolated manner.

Introduction to asynchronous programming

Cocoa and UIKit Asynchronous APIs

  • NotificationCenter
  • The delegate pattern
  • Grand Central Dispatch
  • Closures

Asynchronous programming glossary(術(shù)語表)

  • State, and specifically, shared mutable state
  • Imperative programming
  • Side effects
  • Declarative code

RxSwift combines some of the best aspects of imperative code and functional code.

  • Reactive systems
    • Responsive
    • Resilient
    • Elastic
    • Message driven

Foundation of RxSwift

A team at Microsoft worked on a library, independently from the core teams in the company, and sometime around 2009, offered a new client and server side framework called Reactive Extensions for .NET (Rx).

It was an installable add-on for .NET 3.5, and later became a built-in core library in .NET 4.0. It’s been an open source component since 2012.

Open sourcing the code permitted other languages and platforms to reimplement the same functionality, which turned Rx into a cross-platform standard.

RxSwift finds the sweet spot between traditionally imperative Cocoa code and purist functional code. It allows you to react to events by using immutable code definitions to process asynchronously pieces of input in a deterministic, composable way.

The three building blocks of Rx code are observables, operators, and schedulers.

Observables

class Observable

public class Observable<Element> : ObservableType{
}

protocol ObservableType

// 基礎方法subscribe
public protocol ObservableType : ObservableConvertibleType{
    func subscribe<O: ObserverType>(_ observer: O) -> Disposable where O.E == E
}

// 基礎擴展方法`asObservable()`
extension ObservableType {
    public func asObservable() -> Observable<E> {
    }
}

一個Obvervable對象只能拋出3個事件:

? A next event: 發(fā)生該訂閱事件時拋出,攜帶最新的數(shù)據(jù)
? A completed event: 成功完成了該訂閱事件是拋出
? An error event: 錯誤發(fā)生時會拋出

Operators

ObservableTypeObservable類包含了大量異步功能的離散的抽象方法 分唾,我們可以任意組合這些方法來實現(xiàn)更復雜的邏輯,將這些高度獨立和可組合化的方法塊斗塘,稱之為Rx的Operators恬惯。

例如:實時監(jiān)聽設備方向,然后執(zhí)行filter、map等Operators沛申,然后subscribe給onNext響應,完成整個事件序列姐军。

UIDevice.rx.orientation
  .filter { value in
    return value != .landscape
  }
.map { _ in
    return "Portrait is the best!"
  }
  .subscribe(onNext: { string in
    showAlert(text: string)
  })
事件響應鏈
Schedulers

Schedulers相當于簡化版的GCD铁材,是Rx對GCD的簡化封裝,更易于鏈式調(diào)用和使用奕锌。

  • SerialDispatchQueueScheduler串行隊列
  • ConcurrentDispatchQueueScheduler并行隊列
subscription訂閱和scheduler關系圖

App architecture

  • RxSwift只會負責處理事件著觉、異步的數(shù)據(jù)序列和全局的通信合約,所以它不會更改你的項目框架惊暴,所以你可以選擇MVC饼丘、MVP或MVVM都是可以的。

  • 這種情況下缴守,你是沒必要完全采用Rx來開發(fā)一個新的工程葬毫,而是可以重構(gòu)一些模塊用Rx,或?qū)⑿略龅墓δ苡肦x來開發(fā)屡穗。

  • 不過贴捡,值得注意的是微軟的MVVM模式是特別適合Rx這種數(shù)據(jù)驅(qū)動的開發(fā)框架的,而且ViewModel也可以很方便地暴露Observable<T>的屬性給View村砂,讓UIKit空間和數(shù)據(jù)綁定變得容易簡單烂斋。

RxSwift與MVVM

RxCocoa

  • RxSwift是Rx基于Foundation對Swift的基本數(shù)據(jù)類型和操作方法進行的擴展庫
  • RxCocoa則是對UIKit中的控件屬性進行的Rx擴展庫

例如UISwitch:

toggleSwitch.rx.isOn
  .subscribe(onNext: { enabled in
    print( enabled ? "it's ON" : "it's OFF" )
  })

Installing RxSwift

這一章節(jié)到這里就結(jié)束了蝶念,原作出自Raywenderlich

《Chapter 2: Observables》

如果對你有幫助抛腕,別忘了點個贊和關注~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市媒殉,隨后出現(xiàn)的幾起案子担敌,更是在濱河造成了極大的恐慌,老刑警劉巖廷蓉,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件全封,死亡現(xiàn)場離奇詭異,居然都是意外死亡桃犬,警方通過查閱死者的電腦和手機刹悴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疫萤,“玉大人颂跨,你說我怎么就攤上這事〕度模” “怎么了恒削?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長尾序。 經(jīng)常有香客問我钓丰,道長,這世上最難降的妖魔是什么每币? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任携丁,我火速辦了婚禮,結(jié)果婚禮上兰怠,老公的妹妹穿的比我還像新娘梦鉴。我一直安慰自己,他們只是感情好揭保,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布肥橙。 她就那樣靜靜地躺著,像睡著了一般秸侣。 火紅的嫁衣襯著肌膚如雪存筏。 梳的紋絲不亂的頭發(fā)上宠互,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天,我揣著相機與錄音椭坚,去河邊找鬼予跌。 笑死,一個胖子當著我的面吹牛善茎,可吹牛的內(nèi)容都是我干的券册。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼垂涯,長吁一口氣:“原來是場噩夢啊……” “哼汁掠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起集币,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎翠忠,沒想到半個月后鞠苟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡秽之,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年当娱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片考榨。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡跨细,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出河质,到底是詐尸還是另有隱情冀惭,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布掀鹅,位于F島的核電站散休,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏乐尊。R本人自食惡果不足惜戚丸,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扔嵌。 院中可真熱鬧限府,春花似錦、人聲如沸痢缎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽牺弄。三九已至姻几,卻和暖如春宜狐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蛇捌。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工抚恒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人络拌。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓俭驮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親春贸。 傳聞我的和親對象是個殘疾皇子混萝,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容