RxSwift 或許我們都聽說過,但或許只知道 RxSwift 這個單詞,,長篇大論關(guān)于 RxSwift 的介紹往往使讀者迷失在各種概念當(dāng)中,,卻不知如何讓它大展伸手?;蛟S我們可以換一種姿勢,,一些應(yīng)用場景會讓我們產(chǎn)生共鳴,解決問題的方式由很多,,為什么不找一種最優(yōu)的呢,?RxSwift也許會幫到你。 什么是 ReactiveX(Reactive Extensions)
它無處不在 它是跨平臺的(RxJS,,RxJava,,RxNET),也就是說掌握 RxSwift 這種思想,,學(xué)習(xí)其他的 Rx 系列的將非常簡單,。 先來個總結(jié)?還沒開始就總結(jié),! ReactiveX(Reactive Extensions)是通過可觀察的流實現(xiàn)異步編程的一種API,,它結(jié)合了觀察者模式、迭代器模式和函數(shù)式編程的精華,。RxSwift 是 ReactiveX 編程思想的一種實現(xiàn),,幾乎每一種語言都會有那么一個 Rx[xxxx] 框架,比如 RxJava,,RxJS 等。Rx 可以概括為:
所以 Rx 可以這樣概括,,Rx = Observables LINQ Schedulers,,其中 LINQ(Language Integrated Query)語言集成查詢,比如那些操作符號,。 先來看個例子:修改用戶昵稱 用戶昵稱必須由3-10個字符組成,,用戶名不合法時顯示提示(昵稱由3-10個字符組成),且修改按鈕不可點擊,。
圖片發(fā)自簡書App 知識點說明
到這里,,還不了解基本概念? Observable Observable 直譯為可觀察的,,它在 RxSwift 起到了舉足輕重的作用,,在整個 RxSwift 的使用過程中你會經(jīng)常與它打交道。如果你使用過 RAC ,,它如同 Signal 一樣,。RxSwift 中關(guān)鍵點就是在于如何把普通的數(shù)據(jù)或者事件變成可觀察的,這樣當(dāng)某些數(shù)據(jù)或事件有變化的時候就會通知它的訂閱者,。 那如何能夠讓某些數(shù)據(jù)或事件成為 Observable 呢,? RxSwift 中提供很多種創(chuàng)建 Observable 創(chuàng)建方法。比如:From,、never,、empty 和 create 等,更多創(chuàng)建方法,。訂閱者可以收到 3 個事件,,onNext、onError 和 onCompleted,,每個 Observable 都應(yīng)該至少有一個 onError 或 onCompleted 事件,,onNext 表示它傳給下一個接收者時的數(shù)據(jù)流。
Lefe_x 經(jīng)常刷微博,,剛開始時他并不刷微博,,別人也不會看到他發(fā)的內(nèi)容(這時他是不可訂閱的)。某天,,Lefe_x 想讓自己學(xué)到的知識能幫助更多的同學(xué),,他就注冊了微博,開始了刷微博之旅(變成了可訂閱的 Observable),,這樣別人就可以關(guān)注他(訂閱),。慢慢地,越來越多的人開始關(guān)注他,,這樣當(dāng)他發(fā)微博(事件流)的時候,,它的粉絲就可以被提醒(通知訂閱者),這些提醒有不同功能,,比如有的是提醒 Lefe_x 發(fā)布了新微博,,有的提醒微博被轉(zhuǎn)發(fā)了(相當(dāng)于 onNext、onError 和 onCompleted 事件),。 Operators 操作符 Observable 創(chuàng)建后,,可能為了滿足某些需求需要修改它,,這時就需要用到操作符。RxSwift 提供了非常多的操作符,,當(dāng)然不必要一一掌握這些操作符,,使用的時候查一下即可,當(dāng)然常見的操作符必須要掌握,,比如 map,、flatMap 、create ,、filter 等,。這里查看更多 再來個例子放松下: 這個例子主要把查找數(shù)組中的字符串 Lefe_x,并顯示到 Label 上,。
運行結(jié)果為: 呀,,這不是前幾天有人寫過的嗎?沒錯,,那是前幾天發(fā)的一個 #iOS知識小集# ,,不過哪里只是一個總結(jié),沒有詳細的說明,。這里主要說一下調(diào)度器 (Scheduler)。 Scheduler 調(diào)度器 如果你想給 Observable 操作符鏈添加多線程功能,,你可以指定操作符(或者特定的Observable)在特定的調(diào)度器(Scheduler)上執(zhí)行,。對于 ReactiveX 中可觀察對象操作符來說,它有時會攜帶一個調(diào)度器作為參數(shù),,這樣可以指定可觀察對象在哪一個線程中執(zhí)行,。而默認的情況下,某些可觀察對象是在訂閱者訂閱時的那個線程中執(zhí)行,。SubscribeOn 可以改變可觀察對象該在那個調(diào)度器中執(zhí)行,。ObserveOn 用來改變給訂閱者發(fā)送通知時所在的調(diào)度器。這樣就可以使可觀察對象想在那個調(diào)度器中執(zhí)行就在那個調(diào)度器中執(zhí)行,,不受約束,,而這些細節(jié)是不被調(diào)用者所關(guān)心的。猶如 GCD 一樣,,你只管使用,,底層線程是咋么創(chuàng)建的,你不必關(guān)心,。 參考 NEW RECOMMEND 新/品/推/薦 ¥ 68
|
|