ios - RxSwift 上有某种优先级运算符吗?

标签 ios swift cocoa rxjs rx-swift

我有一个文本字段,它有 2 个验证规则:最小数量的字符和字母数字字符。

我希望能够向用户展示他在错误标签中做错了什么,但问题是,如果我将文本字段绑定(bind)到两个规则,它可能会令人毛骨悚然,因为一旦一条规则获得批准,用户界面就会有点闪烁例如,由于其他验证失败,分隔符的颜色从红色变为绿色再变为红色。

我想知道是否有一种方法可以优先考虑一个绑定(bind)而不是另一个绑定(bind)。例如,这是我目前拥有的:

let minimumValidator 
    = inputField.textField
      .rx.text.orEmpty.map { $0.count >= 8 } // Min amount of chars is 8

minimumValidator.bind(to: inputField.rx.minimumChars)
    .disposed(by: bag)

let regexValidator 
    = inputField.textField
      .rx.text.orEmpty.map { $0.matches(regex) }

regexValidator.bind(to: inputField.rx.regex)
    .disposed(by: bag)

rx.minimumChars 和 rx.regex 是自定义绑定(bind)器

    var minimumChars: Binder<Bool> {
        return Binder(self.base) { control, value in
            UIView.animate(withDuration: 0.1) {
                if value {
                    control.separator.backgroundColor = .white
                    control.errorLabel.isHidden = true
                } else {
                    let error = "Needs more characters"
                    control.separator.backgroundColor = .red
                    control.errorLabel.text = error
                    control.errorLabel.isHidden = false
                }
            }
        }
    }

所以我的想法是优先考虑 idk...假设字母数字验证 - 因此它将显示从最小字符到字母数字错误出现的错误,因此在用户解决字母数字验证之前,它将忽略最小数量的其他流字符。我很确定我错过了 mergeLatest 与 merge 或 idk 的一些组合。

最佳答案

创建一个使用自定义枚举的 Binder

enum Validation {
    case valid
    case minimumChars
    case alphaNumeric
}

然后让每个验证器返回该枚举的一个值。然后将两个验证器组合起来,并将结果映射到单个验证并绑定(bind)。

类似于

Observable.combineLatest(minimumValidator, regexValidator) { v1, v2 in
    // if v1 is not valid return it. Otherwise return v2
}

关于ios - RxSwift 上有某种优先级运算符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59690848/

相关文章:

c++ - 我怎样才能忽略 Xcode 中的一些错误?

objective-c - 将 nsstring 中的字符与不同的字符集进行比较

ios - 一个以 three20 包装 UI 类的方式包装 iOS 动画的库

ios - 如何从现有的 iPhone 项目中删除 Storyboard

ios - 如何从 Helper 类更新 UITabBarController?

swift - UItextview 使用 NSAttributedString 以多种颜色(实时)写入

macos - OSX : How do you allow user to resize window under auto layout?

当 View 获得关键焦点时,Cocoa NSVIew 通知?

ios - Swift 动画重复次数

objective-c - 如何获取当前Mac型号图像