反应性可可验证

时间:2016-06-18 00:22:28

标签: swift mvvm reactive-cocoa

如何在RAC命令或按钮点击后验证表单?我在View Model中有这个地方

self.executeLoginRacCommand = RACCommand(enabled: activateButtonSignal, signalBlock: { (any : AnyObject!) -> RACSignal! in

            return self.executeLoginAPI()
        })

//My question is here, how can I display an alert to my view controller saying may email is invalid.
//MARK: - Execute Login API
    private func executeLoginAPI() -> RACSignal {
        if self.isEmailValid(self.email) {
            return self.signInServices.signInAPIService.signInAPISignal(self.email, password: self.password)
        } else {
            self.errorMessage = "Please insert a valid email"
            return RACSignal.empty()
        }
    }

//MARK: -  Is Email Valid
    func isEmailValid(email: String) -> Bool {
        let emailRegEx = "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$"

        let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
        return emailTest.evaluateWithObject(email)
    }

我在我的View Controller中访问它,如下所示:

 self.signInButton.rac_command = self.signInViewModel.executeLoginRacCommand

点击按钮后,您能否建议一种验证无效电子邮件和显示提醒的好方法?提前谢谢!

1 个答案:

答案 0 :(得分:0)

else分支中,您将返回一个空的RACSignal。 相反,返回发送错误的RACSignal(RACSignal.error(<the error>))。

在ViewController中,您可以订阅errors的{​​{1}}属性并向用户显示错误。