【iOS】RxSwift官方Example4--Github注冊(MVVM)

前言

這一篇檐嚣,是一個仿Github注冊的表單頁面贮泞。官方針對這個例子移迫,介紹了用RxSwift實現(xiàn)MVVM居夹,一個是使用Driver 序列(針對UI界面的)败潦,另一個是Observable 序列。所以可以總結(jié)的知識點如下:

  • MVVM的實現(xiàn)
  • Observable序列和Driver序列的區(qū)別

功能說明

還是老樣子准脂,先說明這個例子做了什么劫扒。

這里寫圖片描述

其實就是一個很經(jīng)典的注冊表單界面:

  • 輸入用戶名,檢驗用戶名是否存在
  • 輸入密碼狸膏,檢驗密碼長度
  • 輸入確認密碼沟饥,檢驗與上次輸入的密碼是否一致
  • 注冊按鈕,當所有輸入內(nèi)容合法時湾戳,才能點擊

MVVM的優(yōu)點

以下摘自百度百科
MVVM模式和MVC模式一樣贤旷,主要目的是分離視圖(View)和模型(Model),有幾大優(yōu)點

  • 低耦合砾脑。視圖(View)可以獨立于Model變化和修改幼驶,一個ViewModel可以綁定到不同的"View"上,當View變化的時候Model可以不變韧衣,當Model變化的時候View也可以不變县遣。
  • 可重用性糜颠。你可以把一些視圖邏輯放在一個ViewModel里面,讓很多view重用這段視圖邏輯萧求。
  • 獨立開發(fā)其兴。開發(fā)人員可以專注于業(yè)務邏輯和數(shù)據(jù)的開發(fā)(ViewModel),設計人員可以專注于頁面設計夸政,使用Expression Blend可以很容易設計界面并生成xml代碼元旬。
  • 可測試。界面素來是比較難于測試的守问,而現(xiàn)在測試可以針對ViewModel來寫匀归。

Driver

Driver是RxSwift專門用于處理UI流的,相比Observable耗帕,它有以下特點:

  • 不會發(fā)出Error
  • 在主線程執(zhí)行
  • 自動添加 shareReplayLatestWhileConnected()

Observable和Driver之間的轉(zhuǎn)換

Observable和Driver的用法基本一致穆端,以下是一個轉(zhuǎn)化例子

使用Observable:

validateUsername = input.username
         .flatMapLatest { username in
         return validationService.validateUsername(username)
         .observeOn(MainScheduler.instance)
         .catchErrorJustReturn(.failed(message: "Error contacting server"))
         }
         .shareReplay(1)

使用Driver:

validateUsername = input.username
            .flatMapLatest { username in
                return validationService.validateUsername(username)
                .asDriver(onErrorJustReturn: .failed(message: "Error contacting server"))
        }

使用 'Driver'的話,會自動地幫我們添加shareReplay(1)仿便,并且

.observeOn(MainScheduler.instance)
.catchErrorJustReturn(.Failed(message: "Error contacting server"))

等語句体啰,可以簡潔的寫為

.asDriver(onErrorJustReturn: .Failed(message: "Error contacting server"))

bindTo和driver

bindTo和driver的作用是一樣的,都是綁定結(jié)果嗽仪,可以直接這樣理解:

  • bindTo用于Observable
  • driver用于Driver

使用bindTo荒勇,這里的viewModel.validateUsername是Observable類型

viewModel.validateUsername
        .bind(to: usernameValidationOutlet.rx.validationResult)
        .disposed(by: disposeBag)

使用driver,這里的viewModel.validateUsername是Driver類型

 viewModel.validateUsername
            .drive(usernameValidationOutlet.rx.validationResult)
            .disposed(by: disposeBag)

總結(jié)

具體的代碼就不分析了闻坚,其實就跟之前幾個例子是一樣的沽翔。這個例子精華在于MVVM的思想,通過ViewModel將視圖和模型綁定在一起窿凤,從而達到解耦的效果仅偎。

Demo地址

https://github.com/maple1994/RxSwfitTest

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市雳殊,隨后出現(xiàn)的幾起案子哨颂,更是在濱河造成了極大的恐慌,老刑警劉巖相种,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異品姓,居然都是意外死亡寝并,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門腹备,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衬潦,“玉大人,你說我怎么就攤上這事植酥《频海” “怎么了弦牡?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長漂羊。 經(jīng)常有香客問我驾锰,道長,這世上最難降的妖魔是什么走越? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任椭豫,我火速辦了婚禮,結(jié)果婚禮上旨指,老公的妹妹穿的比我還像新娘赏酥。我一直安慰自己,他們只是感情好谆构,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布裸扶。 她就那樣靜靜地躺著,像睡著了一般搬素。 火紅的嫁衣襯著肌膚如雪呵晨。 梳的紋絲不亂的頭發(fā)上喂江,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天又固,我揣著相機與錄音,去河邊找鬼缀壤。 笑死猪杭,一個胖子當著我的面吹牛餐塘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播皂吮,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼戒傻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蜂筹?” 一聲冷哼從身側(cè)響起需纳,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎艺挪,沒想到半個月后不翩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡麻裳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年口蝠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片津坑。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡妙蔗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出疆瑰,到底是詐尸還是另有隱情眉反,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站伶跷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏秘狞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一雇初、第九天 我趴在偏房一處隱蔽的房頂上張望靖诗。 院中可真熱鬧刊橘,春花似錦颂鸿、人聲如沸嘴纺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽墅冷。三九已至俺榆,卻和暖如春罐脊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宵溅。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工恃逻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留藕施,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像浊吏,于是被迫代替她去往敵國和親找田。 傳聞我的和親對象是個殘疾皇子墩衙,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

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