我刚开始使用Rx,并决定尝试使用RxSwift制作简单的OSX应用程序。RxSwift驱动程序在第一个值后处理
由于我的应用有登录表单,我发现GithubSignup example与我正在做的非常相似。
我是,但是有一个问题,我的Drivers
在第一个值从他们发出后得到处理,我无法弄清楚如何或为什么。由于我的代码与Github示例中的代码非常相似,因此我必须忽略某些内容。
这里是我的ViewModel:
class LoginVM {
let isWorking: Driver<Bool>
let loginEnabled: Driver<Bool>
init(
input: (
email: Driver<String>,
password: Driver<String>,
loginRequests: Driver<Void>
),
dependency: (
RoundedClient
)
) {
self.isWorking = Variable(false).asDriver()
let credentials = Driver
.combineLatest(input.email, input.password){ (email: $0, password: $1) }
let credentialsEmpty = credentials
.map{ credentials in
credentials.email.characters.count > 0 && credentials.password.characters.count > 0
}
.distinctUntilChanged()
self.loginEnabled = Driver
.combineLatest(credentialsEmpty, self.isWorking){ !($0 || $1) }
.distinctUntilChanged()
}
}
这里是我的ViewController:
class LoginViewController: NSViewController {
var screenManager: ScreenManager!
@IBOutlet weak var emailField: NSTextField!
@IBOutlet weak var passwordField: NSSecureTextField!
@IBOutlet weak var loginButton: NSButton!
@IBOutlet weak var loginSpinner: NSProgressIndicator!
@IBOutlet weak var errorLabel: NSTextField!
let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
let vm = LoginVM(
input: (
email: self.emailField.rx_text.asDriver(),
password: self.passwordField.rx_text.asDriver(),
loginRequests: self.loginButton.rx_tap.asDriver()
),
dependency: RoundedClient.sharedInstance
)
vm.loginEnabled
.driveNext{ [weak self] enabled in
self?.loginButton.enabled = enabled
self?.loginButton.alphaValue = enabled ? 1.0 : 0.5
}.addDisposableTo(self.disposeBag)
vm.isWorking
.drive(self.loginSpinner.ex_animating)
.addDisposableTo(self.disposeBag)
}
}
下面是一个例子,当我附上 “的.debug()”,以credentialsEmpty
司机LoginVM
:
2016-04-17 16:32:36.730: LoginViewController.swift:38 (init(input:dependency:)) -> subscribed
2016-04-17 16:32:36.731: LoginViewController.swift:38 (init(input:dependency:)) -> Event Next(false)
2016-04-17 16:32:39.081: LoginViewController.swift:38 (init(input:dependency:)) -> Event Next(true)
2016-04-17 16:32:39.081: LoginViewController.swift:38 (init(input:dependency:)) -> disposed
一旦价值释放后,最初的一个。