我想使用 ReactiveSwift 实现一个简单的登录功能。
这是我的 ViewController 代码:
func setupRac() {
viewmodel = SignInViewModel()
self.viewmodel.username <~ self.usernameTextField.reactive.continuousTextValues
self.viewmodel.password <~ self.passwordTextField.reactive.continuousTextValues
self.loginButton.reactive.pressed = CocoaAction(viewmodel.submit) { sender in
return (self.usernameTextField.text, self.passwordTextField.text)
}
视图模型:
class SignInViewModel {
let username = MutableProperty<String?>(nil)
let password = MutableProperty<String?>(nil)
let usernameValid: Property<Bool>
let passwordValid: Property<Bool>
let valid: Property<Bool>
let submit: Action<(String?, String?), String, NetworkError>
init() {
self.usernameValid = username.map {
return ($0 ?? "").characters.count > 0
}
self.passwordValid = password.map {
return ($0 ?? "").characters.count > 0
}
self.valid = Property.combineLatest(self.usernameValid, self.passwordValid).map({ (usernameValid, passwordValid) in
return usernameValid && passwordValid
})
self.submit = Action(enabledIf: self.valid, { username, password in
return MembershipManager.sharedInstance.signin(username: username!, password: password!)
})
}
当我将断点设置到该行时return MembershipManager.sharedInstance.signin(...
,仅当我按下登录按钮时它才被击中一次。之后,当我再次按下按钮时,什么也没有发生。
有谁知道原因?我刚开始只使用 ReactiveSwift。