上篇學習了一下,簡單的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()
}
}
用以上代碼即可實現,大大簡化了代碼