检查多个文本字段是否为空 - 使用Swift

时间:2015-10-20 04:18:22

标签: ios swift

所以,我正在开发一个app signUp屏幕。我尝试检查signUp屏幕上的每个字段以查看它是否为空,如果是,则在标签中向用户显示错误消息。我一直在使用else-ifs链

    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会显示消息"第一个名称丢失"。输入名字并按下注册按钮不会做任何事情。我希望它改为"姓氏丢失",但它保留在"名字丢失"。

4 个答案:

答案 0 :(得分:8)

发生这种情况的原因是因为您正在检查是否self.field.text?.isEmpty != nil。您应该检查(self.field.text?.isEmpty ?? true)

基本上,您尝试在字段中获取文本,如果没有文本,则返回nil。通过使用field.text?,您将根据field.text是否为零来创建您访问nil的下一个变量。因此,如果没有文字field.text == nil,则field.text?.isEmpty将始终返回nil。

如果有文字,field.text?.isEmpty将不会为零,并且始终为false,但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,并且也将返回true如果field.text != nil || field.text.isEmpty。如果self.field.text != nil && !self.field.text.isEmpty,它只会返回false。

编写此语句的另一种方法是

if(self.field.text == nil || self.field.text!.isEmpty)

答案 1 :(得分:1)

试试这个:

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
} 

答案 2 :(得分:1)

试试这个:

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
}

答案 3 :(得分:1)

您可以避免if-else情况,并迅速使用三元条件运算符使用一行代码来实现。

firstNameField.text?.isEmpty == true ? showError(message: ""first name missing"") : isValid()
...
}

func showError(message : String){
 errorLabel.text = message
 errorLabel.hidden = false
}
func isValid(){
  // hide label or anything else you want
}