RxSwift-Driver

本文整理了一下Driver的用法
RxSwift-Driver
1、Driver 可以說是最復(fù)雜的 trait袋坑,它的?目標(biāo)是提供一種簡便便 的?方式在 UI 層編寫響應(yīng)式代碼。

2、如果我們的序列列滿?足如下特征,就可以使?用它:

? 不會產(chǎn)?生 error 事件
? 一定在主線程監(jiān)聽(MainScheduler)
? 共享狀態(tài)變化(shareReplayLatestWhileConnected)

3寻咒、為什什么要使?用 Driver?
(1)Driver 最常使用的場景應(yīng)該就是需要用序列來驅(qū)動應(yīng)?程序的情況了,比如:

? 通過 CoreData 模型驅(qū)動 UI
? 使?用一個 UI 元素值(綁定)來驅(qū)動另一個 UI 元素值

(2)與普通的操作系統(tǒng)驅(qū)動程序一樣颈嚼,如果出現(xiàn)序列列錯誤毛秘,應(yīng)用程序?qū)⑼V鬼憫?yīng)用戶輸?。
(3)在主線程上觀察到這些元素也是極其重要的阻课,因為 UI 元素和應(yīng)用程序邏輯通常不是線程安全的熔脂。
(4)使用構(gòu)建 Driver 的可觀察的序列,它是共享狀態(tài)變化柑肴。

---對比普通用法和Driver用法---

這里模擬一個輸入文字請求網(wǎng)絡(luò)的需求:

    //模擬網(wǎng)絡(luò)請求代碼
   func dealData(inputText: String) -> Observable<Any>{
        return Observable<Any>.create({ (ob) -> Disposable in
            //模擬發(fā)出錯誤
            if inputText == "1234" {
                ob.onError(NSError(domain: "testError", code: 1001, userInfo: nil))
            }
            //異步發(fā)送信號
            DispatchQueue.global().async {
                print("模擬網(wǎng)絡(luò)請求返回")
                ob.onNext("輸入了:\(inputText)")
                ob.onCompleted()
            }
            return Disposables.create()
        })

創(chuàng)建普通序列

    //創(chuàng)建普通序列
        let result = textField.rx.text.orEmpty.skip(1)
            .flatMap { [weak self] (text) -> Observable<Any> in
                return (self?.dealData(inputText: text))!
                //執(zhí)行訂閱時回到主線程,如果不加,執(zhí)行訂閱時會在子線程
                .observeOn(MainScheduler.instance)
                    .catchErrorJustReturn("監(jiān)測到錯誤")
        }
            //共享observer序列,防止多次訂閱時多次請求網(wǎng)絡(luò)
            .share(replay: 1, scope: .whileConnected)
        
        result.subscribe(onNext: { (value) in
            print("訂閱到:\(value)")
        }).disposed(by: disposebag)

創(chuàng)建Driver 序列

//創(chuàng)建Driver 序列
//自動共享序列,多次訂閱也只請求一次網(wǎng)絡(luò)
//綁定到UI,自動回到主線程
let result2 = textField.rx.text.orEmpty
        .asDriver()
            .flatMap { (text) -> Driver<Any> in
                return self.dealData(inputText: text)
                    .asDriver(onErrorJustReturn: "監(jiān)測到錯誤")
        }
        result2.map { (text) -> String in
            return "綁定文字到label"
        }.drive(label.rx.text)
        .disposed(by: disposebag)
        
        result2.map{"綁定到button" + ($0 as! String)}
        .drive(button.rx.title())
        .disposed(by: disposebag)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末霞揉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子晰骑,更是在濱河造成了極大的恐慌适秩,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件硕舆,死亡現(xiàn)場離奇詭異秽荞,居然都是意外死亡,警方通過查閱死者的電腦和手機抚官,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門扬跋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人凌节,你說我怎么就攤上這事钦听。” “怎么了倍奢?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵朴上,是天一觀的道長。 經(jīng)常有香客問我卒煞,道長痪宰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮衣撬,結(jié)果婚禮上乖订,老公的妹妹穿的比我還像新娘。我一直安慰自己具练,他們只是感情好垢粮,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著靠粪,像睡著了一般蜡吧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上占键,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天昔善,我揣著相機與錄音,去河邊找鬼畔乙。 笑死君仆,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的牲距。 我是一名探鬼主播返咱,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼牍鞠!你這毒婦竟也來了咖摹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤难述,失蹤者是張志新(化名)和其女友劉穎萤晴,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胁后,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡店读,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了攀芯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屯断。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖侣诺,靈堂內(nèi)的尸體忽然破棺而出殖演,到底是詐尸還是另有隱情,我是刑警寧澤紧武,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布剃氧,位于F島的核電站,受9級特大地震影響阻星,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一妥箕、第九天 我趴在偏房一處隱蔽的房頂上張望滥酥。 院中可真熱鬧,春花似錦畦幢、人聲如沸坎吻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘦真。三九已至,卻和暖如春黍瞧,著一層夾襖步出監(jiān)牢的瞬間诸尽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工印颤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留您机,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓年局,卻偏偏與公主長得像际看,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子矢否,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

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

  • 問題問題一:訂閱了幾次 請求了幾次仲闽,浪費網(wǎng)絡(luò)問題二:返回來的在子線程,子線程更新UI問題問題三:錯誤事件 解決方案...
    Code_人生閱讀 979評論 2 2
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,089評論 1 32
  • 在之前的課程中僵朗,我們已經(jīng)學(xué)習(xí)了進程相關(guān)的知識蔼囊。進程是計算機程序被執(zhí)行的一個實例(instance),一個進程可能由...
    夏威夷的芒果閱讀 899評論 0 2
  • 概述 RxSwift顧名思義是Swift的一種框架衣迷,您或許曾經(jīng)聽說過「響應(yīng)式編程」(Reactive Progra...
    Mr大喵喵閱讀 1,856評論 3 4
  • 簡介 小程序 toast showLoading 其實是使用同一個組件畏鼓。這就導(dǎo)致了調(diào)用wx.hideLoading...
    鎢絲燈閱讀 1,021評論 0 0