RxSwift之路02-----RxSwift使用方式

上篇學習了一下,簡單的Rx使用的方式,這篇將更直接的使用RxSwift來寫一些就簡單的UI上的邏輯處理
使用下面代碼即可實現一個檢測用戶名和密碼的並作出相應處理的UI邏輯

演示效果

這裏寫圖片描述

**示例代碼如下**
import RxSwift
import RxCocoa

class ExampleViewController: UIViewController {
    let disposeBag = DisposeBag()
    let minimalUsernameLength = 5
    @IBOutlet weak var UserName: UILabel!
    @IBOutlet weak var NameTextField: UITextField!
    @IBOutlet weak var NameAlert: UILabel!
    @IBOutlet weak var passward: UILabel!
    @IBOutlet weak var PassWardTextField: UITextField!
    @IBOutlet weak var passWardAlert: UILabel!
    @IBOutlet weak var LoginButton: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()

        let userNameValid = NameTextField.rx.text.orEmpty
            .map { $0.count >= self.minimalUsernameLength }
            .share(replay: 1, scope: SubjectLifetimeScope.forever)

        let passwordValid = PassWardTextField.rx.text.orEmpty
            .map { $0.count >= self.minimalUsernameLength }
            .share(replay: 1, scope: SubjectLifetimeScope.forever)

        let evertything = Observable.combineLatest(
        userNameValid,
        passwordValid
        ){$0 && $1}
        .share(replay: 1, scope: SubjectLifetimeScope.forever)


        userNameValid
        .bind(to: PassWardTextField.rx.isEnabled)
        .disposed(by: disposeBag)

        userNameValid
        .bind(to: NameAlert.rx.isHidden)
        .disposed(by: disposeBag)


        passwordValid
        .bind(to: passWardAlert.rx.isHidden)
        .disposed(by: disposeBag)

        evertything
        .bind(to: LoginButton.rx.isEnabled)
        .disposed(by:disposeBag)

            LoginButton.rx.tap
            .subscribe(onNext: {
                self.showAlert()
            })
            .disposed(by: disposeBag)

    }

    func showAlert() {
        let alertView = UIAlertView(
            title: "RxExample",
            message: "This is wonderful",
            delegate: nil,
            cancelButtonTitle: "OK"
        )

        alertView.show()
    }

}

用以上代碼即可實現,大大簡化了代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章