RxSwift實現(xiàn)一個注冊登錄

通過RxSwift實現(xiàn)一個簡單的功能---用戶登錄界面邏輯
實現(xiàn)的邏輯為:用戶名和密碼分別長度大于6位時登錄按鈕可以點擊,否則不可以點擊, 用戶名和密碼為123456的時候登錄成功,否則不予登錄
似不似很簡單!

效果圖:

0001.gif
  • StoryBoard中拖入控件
    @IBOutlet weak var userNameField: UITextField!
    @IBOutlet weak var passwordField: UITextField!
    @IBOutlet weak var loginButton: UIButton!
    

let disposeBag = DisposeBag() //用于管理Observable

- 創(chuàng)建一個結(jié)構(gòu)體,用戶保存登錄返回信息

struct LoginResult {
var isLogin: Bool? //是否登錄成功
var info: String? //信息
}



- 分別創(chuàng)建用于檢測用戶名和密碼是否可用的信號源

//用戶名是否可用
let userNameIsAvalid = self.userNameField.rx.text.orEmpty.map({ $0.characters.count >= 6 })
//密碼是否可用
let passwordIsAvalid = self.passwordField.rx.text.orEmpty.map({ $0.characters.count >= 6 })

- 根據(jù)用戶名和密碼是否可用,控制登錄按鈕的激活狀態(tài)開關(guān)

//通過用戶名和密碼是否可用 共同作用于登錄按鈕的可用性
Observable.combineLatest(userNameIsAvalid, passwordIsAvalid)
.map({ $0 && $1 }) //當兩者都處于可用狀態(tài)時登錄按鈕方為可用
.subscribe(onNext:{
self.loginButton.isEnabled = $0
self.loginButton.backgroundColor = $0 ? UIColor.red : UIColor.gray
self.loginButton.setTitleColor(($0 ? UIColor.white : UIColor.groupTableViewBackground), for: .normal)
})
.addDisposableTo(disposeBag)


- 為登錄按鈕綁定事件

//綁定登錄按鈕事件
self.loginButton.rx.controlEvent(UIControlEvents.touchUpInside).flatMap({_ in
self.isAvalidLoginRequest() //在這里處理登錄請求
}).subscribe(onNext: { [weak self] loginResule in
self?.showAlert(withMessage: loginResule.info!)
})
.addDisposableTo(disposeBag)

- 登錄請求處理

func isAvalidLoginRequest() -> Observable<LoginResult> {

    return Observable<LoginResult>.create({observer in
        if self.userNameField.text == "123456" && self.passwordField.text == "123456" {
            observer.onNext(LoginResult(isLogin: true, info: "登陸成功!"))
        }else {
            observer.onNext(LoginResult(isLogin: false, info: "用戶名或密碼錯誤,請重試!"))
        }
        return Disposables.create()
    })
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 在iOS學習中登錄注冊是一個萬能的可以拿出來實戰(zhàn)的demo。接下來我們就從登錄開始入手,PS:如果你對RXSwif...
    藍色的風閱讀 5,107評論 3 6
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,537評論 19 139
  • 前言 在之前用Objective-C語言做項目的時候,我習慣性的會利用MVVM模式去架構(gòu)項目,在框架Reactiv...
    Tangentw閱讀 21,396評論 32 124
  • 作為一個iOS開發(fā)者,你寫的每一行代碼幾乎都是在相應某個事件,例如按鈕的點擊,收到網(wǎng)絡消息,屬性的變化(通過KVO...
    不作不會死閱讀 505評論 0 1
  • 人和人的相處總會有很多故事,一個人故事越來越多,就會有遺忘。但,有些人,有些事,永遠不會忘! 尤其是,你想到會笑,...
    毛煜翔閱讀 212評論 0 1

友情鏈接更多精彩內(nèi)容