Rx Swift:复杂的文本字段验证 [英] Rx Swift : Complex TextFields Validation

查看:19
本文介绍了Rx Swift:复杂的文本字段验证的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆