fin*_*elp 5 ios swift rx-swift
在RxSwift/RxCocoa 2.0.0-beta 3中,我有一个ViewModel:
let someString = Variable("")
func isValidSomeString() -> Observable<Bool> {
if someString.value.characters.count == 0 {
return just(false)
}
return just(true)
}
Run Code Online (Sandbox Code Playgroud)
我已将someString绑定到ViewController中的文本字段.
每当someString(或者文本字段,如果这是更好的方式)发生变化时,我想要根据someString是否有效启用按钮.
我尝试使用"Observable <Bool>",但开始沿着另一条路走下去.我可以在ViewController中执行此操作:
someViewModel.someString.subscribeNext { text -> Void in
// could just someUIButton.enabled = someViewModel.isValidSomeString(text)
}.addDisposableTo(disposeBag)
Run Code Online (Sandbox Code Playgroud)
是不是有另一种比isValidSomeString(text)方法更简洁的方法?我们已经使用isValidLogin获得了很好的成功,它返回了使用combineLatest的Observable <Bool>.
小智 8
听起来像是Action在这种情况下使用的完美工具.您需要Action在ViewModel中创建一个,让它的enabledIf可观察性是对字符串的更改的结果,并将此操作连接到您的UIButton.这样,该按钮将自动启用.
在ViewModel中,您需要添加以下内容:
var buttonAction: CocoaAction {
let hasString = self.someString.map { !$0.isEmpty }
return CocoaAction(enabledIf: hasString) {
// do something when button tapped
return empty()
}
}
Run Code Online (Sandbox Code Playgroud)
将ViewController绑定到ViewModel时,您将执行以下操作:
myButton.rx_action = viewModel.buttonAction
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7400 次 |
| 最近记录: |