检查是否有多个文本框是空的 – 用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 }