检查是否有多个文本框是空的 – 用Swift的iOS
所以,我正在开发一个应用程序注册屏幕。 我试图检查注册屏幕上的每个字段,看看它是否是空的,如果是,在标签中显示错误消息给用户。 我一直在使用一系列的其他 – 如果
if ((self.firstNameField.text?.isEmpty) != nil) { errorLabel.text = "first name missing" errorLabel.hidden = false } else if ((self.lastNameField.text?.isEmpty) != nil) { errorLabel.text = "last name missing" errorLabel.hidden = false } else if ((self.emailField.text?.isEmpty) != nil) { errorLabel.text = "email missing" errorLabel.hidden = false } else if ((self.passwordField.text?.isEmpty) != nil) { errorLabel.text = "password missing" errorLabel.hidden = false } else if ((self.confirmPasswordField.text?.isEmpty) != nil) { errorLabel.text = "password confirmation missing" errorLabel.hidden = false } else if (self.passwordField.text != self.confirmPasswordField.text) { errorLabel.text = "Passwords don't match, try again!" errorLabel.hidden = false } //omitted what happens if there are no fields missing
现在,当我运行应用程序的所有文本字段为空时,errorLabel显示消息“名字丢失”。 input名字并按下注册button什么也不做。 我希望它变成“姓氏遗失”,但它仍然是“名字遗失”。
这是因为你正在检查self.field.text?.isEmpty != nil
。 你应该检查(self.field.text?.isEmpty ?? true)
基本上,你正在试图获取字段中的文本,如果没有文本,则返回nil
。 通过使用field.text?
,根据field.text
是否为零,你正在使下一个variables为nil。 所以,当没有文本时, field.text == nil
,做field.text?.isEmpty
将总是返回nil。
当有文本时, field.text?.isEmpty
不会是零,并且将永远是假的,但是nil != false
,所以语句总是返回false
。
要解决这个问题,你应该检查
if(self.field.text?.isEmpty ?? true)
这基本上意味着
if((self.field.text?.isEmpty == nil ? true : self.field.text?.isEmpty))
基本上,如果field.text == nil
(这会使field.text?.isEmpty
nil,由于??
运算符使得结果为true
),这将返回true,并且如果field.text != nil || field.text.isEmpty
field.text != nil || field.text.isEmpty
。 只有self.field.text != nil && !self.field.text.isEmpty
它才会返回false。
写这个声明的另一种方法是
if(self.field.text == nil || self.field.text!.isEmpty)
试试这个:
if self.firstNameField.text?.isEmpty { errorLabel.text = "first name missing" errorLabel.hidden = false } else if self.lastNameField.text?.isEmpty { errorLabel.text = "last name missing" errorLabel.hidden = false } else if self.emailField.text?.isEmpty { errorLabel.text = "email missing" errorLabel.hidden = false } else if self.passwordField.text?.isEmpty { errorLabel.text = "password missing" errorLabel.hidden = false } else if self.confirmPasswordField.text?.isEmpty { errorLabel.text = "password confirmation missing" errorLabel.hidden = false } else if (self.passwordField.text != self.confirmPasswordField.text) { errorLabel.text = "Passwords don't match, try again!" errorLabel.hidden = false }
试试这个:
if self.firstNameField.text! == "" { errorLabel.text = "first name missing" errorLabel.hidden = false } else if self.lastNameField.text! == "" { errorLabel.text = "last name missing" errorLabel.hidden = false } else if self.emailField.text! == "" { errorLabel.text = "email missing" errorLabel.hidden = false } else if self.passwordField.text! == "" { errorLabel.text = "password missing" errorLabel.hidden = false } else if self.confirmPasswordField.text! == "" { errorLabel.text = "password confirmation missing" errorLabel.hidden = false } else if !(self.passwordField.text! == self.confirmPasswordField.text!) { errorLabel.text = "Passwords don't match, try again!" errorLabel.hidden = false }