我正在使用Swift创建一个应用程序,我需要在提交表单之前验证表单。现在,我在IBAction内部的“保存”按钮上附加了一个嵌套的if / else语句,如果它看到空的第一个输入(即名称),则“名称”标签变成红色并显示*,表示用户必须输入该信息,然后再继续。但是,我遇到了一个错误,即使整个页面都是空的,它也只会检查第一个输入并将其变为红色(如果为空)。
我如何才能更有效地构建此验证代码,以便在将所有项目变为红色之前,仅将第一个项目变为红色之前,先检查所有值。
`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语句。
答案 0 :(得分:2)
首先遵循正确的naming rules for variables
,
keywords
用作variable
的名称。 Date
是关键字。改用date
或dateField
或其他方式。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
}
答案 1 :(得分:0)
如果您嵌套If / else,则只会运行其中之一(以防万一都是空的)
在您的示例中,名称已经为空,因此它将执行您的if代码并丢弃else。
如果要进行的每项检查,都应该执行一次,如果它们很多,则可以保存一些代码行,如下所示:
for textField in [nameTextField, dateTextField, etc] {
if textField.isEmpty {
textField.textColor = .red
textField.text.append(" *")
}
}
当然,这种方式对颜色有效,但对*却不那么有效,以防您不希望仅追加而是修改它,就像我猜想在Date的情况下所做的那样。