ios - 使用 RxSwift 和 RXCocoa 在按钮单击时验证所有文本字段

标签 ios swift uibutton rx-swift rx-cocoa

我是 RxSwift 和 RxCocoa 的新手,正在学习。

我想在单击按钮时验证所有文本字段,并根据验证向用户显示警告消息。

验证成功后,我需要在表中插入记录。

引用以下代码...

var result = txtFname.rx.text
    result.asObservable().subscribe(onNext: { text in
        if text!.isEmpty {
            self.showAlert(msg: "Plese enter first name.")
            self.txtFname.becomeFirstResponder()
        }
    }).disposed(by: disposeBag)

    result = txtLname.rx.text
    result.asObservable().subscribe(onNext: { text in
        if text!.isEmpty {
            self.showAlert(msg: "Please enter last name.")
            self.txtLname.becomeFirstResponder()
        }
    }).disposed(by: disposeBag)

    result = txtEmail.rx.text
    result.asObservable().subscribe(onNext: { text in

        if text!.isEmpty {
            self.showAlert(msg: "Please enter email id.")
            self.txtLname.becomeFirstResponder()
        }
    }).disposed(by: disposeBag)

   //need to check here if all fields are valid or not 
   //if all fields are valid then insert record....

当我按下一个按钮时,它一次检查所有验证并显示警报...

但我想做的是,如果一个验证失败,那么在上一个验证成功之前,它不应该再进一步......

我不知道如何做到这一点。任何帮助将不胜感激。

最佳答案

你可以这样做。

  self.button.rx.tap.asObservable()
     .filter({ (_) -> Bool in
        guard !(self.txtFname.text ?? "").isEmpty else {
           self.showAlert(msg: "Please enter first name.")
           self.txtFname.becomeFirstResponder()
           return false
        }

        guard !(self.txtLname.text ?? "").isEmpty else {
           self.showAlert(msg: "Please enter last name.")
           self.txtLname.becomeFirstResponder()
           return false
        }

        guard !(self.txtEmail.text ?? "").isEmpty else {
           self.showAlert(msg: "Please enter email id.")
           self.txtEmail.becomeFirstResponder()
           return false
        }

        return true
     })
     .subscribe { _ in
        // do something when all the fields are valid
        self.showAlert(msg: "All fields are valid")
     }
     .disposed(by: disposeBag)

关于ios - 使用 RxSwift 和 RXCocoa 在按钮单击时验证所有文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49553049/

相关文章:

swift - 通用结构的集合

ios - UserDefaults 数组返回为空

ios - 如何在某些条件下(if/else)取消segue?

swift - 按钮作为变量

ios - 使用 itms-services 分发 Web Clip OTA

ios - 如何找到此系统警报的 UI View ?

objective-c - 如何检查设备是否为Ipad mini

objective-c - NSURL 对象不是 Objective-C 对象

ios - Xcode 6按钮目标不起作用

ios - 如何将按钮的文本转换为 Swift 中的变量?