【问题标题】:Validation code only checks the first item?验证码只检查第一项?
【发布时间】:2019-06-05 18:35:03
【问题描述】:

我正在使用 Swift 创建一个应用程序,我需要在提交表单之前验证表单。现在我有一个嵌套的 if/else 语句附加到 IBAction 内的“保存”按钮,如果它看到第一个输入为空,即名称,则“名称”标签变为红色并获得一个 *,表示用户必须输入继续之前的信息。但是,我遇到了一个错误,它只检查第一个输入并将其变为红色(如果为空),即使整个页面都是空的。

如何更有效地构建此验证代码,以便在将项目变为红色之前检查所有值,并且只检查第一个项目。

`if (Name!.text!.isEmpty) {
            nameLabel.text = "Name *"
            nameLabel.textColor = UIColor.red
        } else {
            if (Date!.text!.isEmpty) {
                dateLabel.text = "Outage Event ID *"
                dateLabel.textColor = UIColor.red
            } `

这更长,但我没有看到需要添加所有这些,所以这是前两个嵌套 if/else 语句。

【问题讨论】:

  • 是否要为所有空字段显示警报?
  • 是的。理想情况下,我希望用户知道一个字段是空的。
  • 如果所有字段都是强制性的,您也可以使用 && 运算符来检查和验证您是否在所有必填字段中都有数据。这将只需要一个 if-else 并且您的所有数据都将得到验证。
  • 你的问题对我的代码帮助很大

标签: ios swift string validation uitextfield


【解决方案1】:

首先按照正确的naming rules for variables

  1. 不要使用keywords 作为variable 名称。 Date 是一个关键字。请改用datedateField 或其他内容。
  2. 将第一个字母的变量命名为小而不是大写,即name而不是Name

不要使用嵌套的if 语句,而是使用多个if 语句来检查所有字段,即

if let text = name?.text, text.isEmpty {
    nameLabel.text = "Name *"
    nameLabel.textColor = UIColor.red
}

if let text = date?.text, text.isEmpty {
    dateLabel.text = "Outage Event ID *"
    dateLabel.textColor = UIColor.red
}

【讨论】:

  • Nitpick - Date 不是关键字。 ifwhile 是关键字。 Date 只是一个结构的名称。你的观点当然是有效的。避免为您自己的类型和变量使用现有的类/结构/枚举名称。
  • 我的最后一个条目是一个 textView 而不是一个名为 categoryNotes 的 textField 并且它没有响应这个(或我之前的代码)你有什么建议吗?
  • textView 也有 text 属性,您可以用同样的方式检查 isEmpty 状态。
【解决方案2】:

如果你用 If/else(s) 嵌套,它只会运行其中一个(以防所有都是空的)

在您的示例中,名称已经为空,因此它会执行您的 if 代码并丢弃 else。

如果你想要做的每一个检查,你应该做一个,如果他们很多,你可以像这样保存一些代码行:

for textField in [nameTextField, dateTextField, etc] {
   if textField.isEmpty {
      textField.textColor = .red
      textField.text.append(" *")
   }
}

当然,这种方式对颜色有效,但对 * 不利,以防您不仅想追加而且修改它,就像我猜你在 Date 的情况下所做的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    相关资源
    最近更新 更多