RxSwift之深入解析如何创建观察者Observer
生活随笔
收集整理的這篇文章主要介紹了
RxSwift之深入解析如何创建观察者Observer
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、什么是觀察者?
- “觀察者”是用來監(jiān)聽事件,然后它需要這個事件做出響應(yīng)。例如:彈出提示框就是觀察者,它對點擊按鈕這個事件做出響應(yīng)。
- 那么,什么是觀察者呢?其實,響應(yīng)事件的都是觀察者。
-
- 當(dāng)室溫高于 33 度時,打開空調(diào)降溫,打開空調(diào)降溫就是觀察者 Observer:
-
- 當(dāng)《海賊王》更新一集時,我們就立即觀看這一集,觀看這一集就是觀察者 Observer:
-
- 當(dāng)取到 JSON 時,將它打印出來,將它打印出來就是觀察者 Observer:
-
- 當(dāng)任務(wù)結(jié)束后,提示用戶任務(wù)已完成,提示用戶任務(wù)已完成就是觀察者 Observer:
二、如何創(chuàng)建觀察者?
- 和 Observable 一樣,框架已經(jīng)幫我們創(chuàng)建好了許多常用的觀察者。例如:view 是否隱藏,button 是否可點擊, label 的當(dāng)前文本,imageView 的當(dāng)前圖片等。
- 另外,有一些自定義的觀察者是需要我們自己創(chuàng)建的。例如,創(chuàng)建一個彈出提示框的的觀察者:
- 創(chuàng)建觀察者最直接的方法就是在 Observable 的 subscribe 方法后面描述,事件發(fā)生時,需要如何做出響應(yīng)。而觀察者就是由后面的 onNext,onError,onCompleted 的這些閉包構(gòu)建出來的。
三、AnyObserver
- AnyObserver 可以用來描敘任意一種觀察者。
- 打印網(wǎng)絡(luò)請求結(jié)果:
- 可以看作是:
- 用戶名提示語是否隱藏:
- 可以看作是:
四、Binder
- Binder 主要有以下兩個特征:
-
- 不會處理錯誤事件;
-
- 確保綁定都是在給定 Scheduler 上執(zhí)行(默認(rèn) MainScheduler)。
- 一旦產(chǎn)生錯誤事件,在調(diào)試環(huán)境下將執(zhí)行 fatalError,在發(fā)布環(huán)境下將打印錯誤信息。
① 示例
- 在上文中的 AnyObserver ,我們舉了這樣一個例子:
- 由于這個觀察者是一個 UI 觀察者,所以它在響應(yīng)事件時,只會處理 next 事件,并且更新 UI 的操作需要在主線程上執(zhí)行。因此一個更好的方案就是使用 Binder:
- Binder 可以只處理 next 事件,并且保證響應(yīng) next 事件的代碼一定會在給定 Scheduler 上執(zhí)行,這里采用默認(rèn)的 MainScheduler。
② 復(fù)用
- 由于頁面是否隱藏是一個常用的觀察者,所以應(yīng)該讓所有的 UIView 都提供這種觀察者:
- 這樣不必為每個 UI 控件單獨創(chuàng)建該觀察者,這就是 usernameValidOutlet.rx.isHidden 的由來,許多 UI 觀察者都是這樣創(chuàng)建的:
-
- 按鈕是否可點擊 button.rx.isEnabled:
-
- label 的當(dāng)前文本 label.rx.text:
- 也可以用這種方式來創(chuàng)建自定義的 UI 觀察者。
總結(jié)
以上是生活随笔為你收集整理的RxSwift之深入解析如何创建观察者Observer的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python之深入解析Vulture如何
- 下一篇: iOS之深入解析谓词NSPredicat