【发布时间】:2021-02-22 22:31:25
【问题描述】:
我需要使用单选按钮验证表单,但我做不到,我分享我的代码:
我的观点:
private func registerForm() {
tvUserName.rx.text.map { $0 ?? "" }.bind(to: viewModel.userNamePublishSubject).disposed(by: disposeBag)
tvEmail.rx.text.map { $0 ?? "" }.bind(to: viewModel.emailPublishSubject).disposed(by: disposeBag)
tvPassword.rx.text.map { $0 ?? "" }.bind(to: viewModel.passwordPublishSubject).disposed(by: disposeBag)
tvRepeatPassword.rx.text.map { $0 ?? "" }.bind(to: viewModel.repeatPasswordPublishSubject).disposed(by: disposeBag)
viewModel.formLoginNativaIsValid().bind(to: btnNext.rx.isEnabled).disposed(by: disposeBag)
checkBoxOutlet.rx.tap
.scan(false) { lastValue, _ in
return !lastValue
}
.bind(to: btnNext.rx.isEnabled)
.disposed(by: disposeBag)
}
我的视图模型:
let userNamePublishSubject = PublishSubject<String>()
let emailPublishSubject = PublishSubject<String>()
let passwordPublishSubject = PublishSubject<String>()
let repeatPasswordPublishSubject = PublishSubject<String>()
func formLoginNativaIsValid() -> Observable<Bool> {
return Observable.combineLatest(userNamePublishSubject.asObserver(),
emailPublishSubject.asObserver(),
passwordPublishSubject.asObserver(),
repeatPasswordPublishSubject.asObserver()).map { userName, email, password, repeatPassword in
return self.validateRegister(userName: userName, email: email, password: password,
repeatPassword: repeatPassword)
}.startWith(false)
}
private func validateRegister(userName: String, email: String, password: String, repeatPassword: String) -> Bool {
return userName.count >= 5 && email.isEmail() && password.count >= 5 && repeatPassword.count >= 5 && password == repeatPassword
}
我已经验证了表单,但我还需要用户接受条款和条件才能启用“下一步”按钮。
【问题讨论】:
-
我无法将您的代码复制粘贴到文本文件中。可以提供文字吗?
-
@DanielT。嗨丹尼尔,有你要求的代码。
标签: swift forms checkbox rx-swift rx-cocoa