为文本字段输入设置验证器的设计模式是什么?

时间:2018-03-13 19:53:48

标签: swift design-patterns

我正在为我的应用程序构建入职培训。我想在textFieldDidEndEditing()中验证用户输入,以便在出现问题时向用户提供即时反馈。每个textField需要不同的验证,例如,一个将确认输入是有效的电子邮件,另一个将确认有效的出生日期。

我已经尝试了很多设计模式,以使其明确灵活,但在swift中似乎没有任何一种。我想知道是否有人有一个很好的解决方案吗?

我想避免像这样的坏事:

func textFieldDidEndEditing(textfield: UItextField) { 
    if textfield = emailTextBox {
        if validEmail(textfield.text) {
            textfield.shadowColor = blue
        } else {
            textfield.shadowColor = red
        }
    }
    if textfield = dateofBirthTextBox {
        if validDOB(textfield.text) {
            textfield.shadowColor = blue
        } else {
            textfield.shadowColor = red
        }
    }
}

我想尽可能接近这个:

func textFieldDidEndEditing(textfield: UItextField) {
    if textfield.isValid {
       textfield.shadowColor = blue
    } else {
       textfield.shadowColor = red
    }
}

我想过/尝试过:

  • 使用许多验证功能扩展UItextField
  • 使用由子类覆盖的通用验证器函数扩展UItextField,每个textField都是一个子类
  • 每个UItextField子类实现的Validator协议
  • Validator超类然后使用[UItextField:Validator]将子类放入字典中

由于Swift中的限制,我无法很好地实现这些功能,并希望得到任何帮助。

非常感谢

1 个答案:

答案 0 :(得分:0)

一个好方法是尝试使用RxSwift来解决这个问题,它提供了一种处理此类情况的反应式解决方案技术并避免旧的错误,请参阅此处的演示版本RXSwiftDeno

在该教程中,这是textfeild验证部分的标题 RxSwift和直接文本输入