Rx Swift:复杂的文本字段验证 [英] Rx Swift : Complex TextFields Validation
问题描述
我是 RxSwift
的新手,我发现的所有示例都在处理简单的案例.
I'm new to RxSwift
and all example I found are handling simple cases.
我正在尝试对我的文本字段进行表单验证.我的自定义 TextField 类有一个方法 isValid()
和一个 regexp
.isValid
返回基于 regexp
属性.
I'm trying to do form validation for my textfields.
My custom TextField class has a method isValid()
and a regexp
. The isValid
return is based on the regexp
attribute.
到目前为止,我已经写了以下内容:
So far, I have written the following :
let valids = [mLastName, mFirstName, mEmailField].map {
$0.rx.text.map {
text -> Bool in
// I want more complex logic here
// Like return field.isValid()
return text!.characters.count > 0
}
}
let _ = Observable.combineLatest(valids) { iterator -> Bool in
return iterator.reduce(true, { $0 && $1 })
}.subscribe(onNext: { allValid in
///update button according to AllValid
})
有谁知道如何更新代码以使第一个 Observable
基于我的 isValid()
方法而不是 text!.characters.count
Does anyone know how to update the code to base the first Observable<Bool>
be based on my isValid()
method instead of text!.characters.count
推荐答案
我自己找到了答案.问题出在第一张地图上,我不应该使用匿名参数.
I found the answer myself. The problem was in the first map, I shouldn't use anonymous parameter.
见:
let valids = [mLastName, mFirstName, mEmailField].map { field in
field.rx.text.map({ _ in return field.isValid() })
}
_ = Observable.combineLatest(valids) { iterator -> Bool in
return iterator.reduce(true, { return $0 && $1 })
}.bindTo(self.mValidateButton.rx.isEnabled)
这篇关于Rx Swift:复杂的文本字段验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!