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