验证码只检查第一项?

Validation code only checks the first item?

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

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

`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 语句。

首先要遵循正确的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
}

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

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

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

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

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