我对RxSwift以及与Driver的使用有疑问。
我只尝试过这种模式
loginButton.rx_tap
.doOn({[unowned self] _ in
self.loginButton.enabled = false
})
.debug()
.flatMap({[unowned self] in self.loginViewModel.login() })
.subscribeNext({ [weak self] login in
// Custom code
})
.addDisposableTo(disposeBag)
所以一切都从点击按钮开始...但如果我可以尝试以这种方式开始:
let contractCode = Variable(contractDetail.contractCode).asDriver()
viewModel = viewModel(provider: apiProvider! as! RxMoyaProvider<APIProvider>, contractCode: contractCode)
_ = viewModel?.getStatus()
.subscribeNext({ data in
print(data)
guard data?.result == 1 else {
// ALERT
return;
}
// Custom code
})
如果contractDetail.contractCode是String,则viewModel中的contractCode是Driver。 它订阅它但不会触发onNext,因此不会调用subscribeNext。 你能帮助我吗?这种方法有什么问题? 感谢
答案 0 :(得分:2)
你的意思是这部分没有触发下一个:Variable(contractDetail.contractCode).asDriver()
?
如果是,您如何更改contractCode的值?如果你这样做:
// binding
Variable(contractDetail.contractCode).asDriver()./* more binding */
// change value (contractCode is a simple string)
contractDetail.contractCode = "new value of contract"
它不起作用,因为Variable不会观察给定值,所以你必须改变实际变量的value属性:
// create variable
let variable = Variable(contractDetail.contractCode)
// binding
variable.asDriver()./* more binding */
// change value of variable
variable.value = "new value of contract"
在这种情况下,新值将导致该变量订阅者的onNext事件。