validation文本字段swift 3

我正在尝试使所有文本字段都必需,以确保用户不会将其留空。 我试过这个,但由于某种原因,它不起作用。 我觉得我的逻辑是正确的,但这是swift的逻辑问题

这是我的代码:

let title = txtTitle.text! let location = txtWhere.text! let when = txtWhen.text! if title != nil && location != nil && when != nil { var titleArray = [String]() var whereArray = [String]() var whenArray = [String]() let titleObject = UserDefaults.standard.object(forKey: "saveTitle") let whereObject = UserDefaults.standard.object(forKey: "saveLocation") let whenObject = UserDefaults.standard.object(forKey: "saveWhen") if let tempTitle = titleObject as? [String] { titleArray = tempTitle titleArray.append(txtTitle.text!) print(titleArray) } else { titleArray = [txtTitle.text!] } if let tempWhere = whereObject as? [String] { whereArray = tempWhere whereArray.append(txtWhere.text!) //print(titleArray) } else { whereArray = [txtWhere.text!] } if let tempWhen = whenObject as? [String] { whenArray = tempWhen whenArray.append(txtWhen.text!) //print(titleArray) } else { whenArray = [txtWhen.text!] } UserDefaults.standard.set(titleArray, forKey: "saveTitle") UserDefaults.standard.set(whereArray, forKey: "saveLocation") UserDefaults.standard.set(whenArray, forKey: "saveWhen") txtTitle.text = "" txtWhere.text = "" txtWhen.text = "" txtTime.text = "" } else { errMsg.isHidden = false errMsg.text = "All fields are required" } } 

要可靠地检查文本字段的text属性是否为空且不为空

 if let title = txtTitle.text, !title.isEmpty, let location = txtWhere.text, !location.isEmpty, let when = txtWhen.text, !when.isEmpty { ... 

如果所有条件都通过,则安全地打开三个变量。

一个。 你不应该强制解包( txtTitle.text! ):而是检查可选值

湾 您可能想检查空字符串而不仅仅是nil

也就是说,您可以测试有效性:

 let title = txtTitle.text if title?.isEmpty == false { ...// title was filled } 

或者更好(谢谢Leo Dabus):

 if let title = txtTitle.text, !title.isEmpty { ...// title was filled } 

TEXTFIELD VALIDATION ======================>

 func textFieldShouldReturn(_ textField: UITextField) -> Bool { switch (textField.tag) { case 1: password.becomeFirstResponder() case 2 : confirm_pass.becomeFirstResponder() case 3 : email.becomeFirstResponder() case 4 : phone.becomeFirstResponder() case 5 : phone.resignFirstResponder() default: break } return true } func textFieldShouldClear(_ textField: UITextField) -> Bool { return true } func textFieldDidEndEditing(_ textField: UITextField) { if (textField == username) { let name_reg = "[A-Za-z0-9]{5,20}" let name_test = NSPredicate(format: "SELF MATCHES %@", name_reg) if name_test.evaluate(with: username.text) == false { let alert = UIAlertController(title: "Information", message: "Enter the name in correct format", preferredStyle: .alert) let ok = UIAlertAction(title: "Ok", style: .default, handler: nil) let cancel = UIAlertAction(title: "Cancel", style: .default, handler: nil) alert.addAction(ok) alert.addAction(cancel) self.present(alert, animated: true, completion: nil) } } if (textField == password) { let name_reg = "[A-Z0-9a-z._%@+-]{6,10}" let name_test = NSPredicate(format: "SELF MATCHES %@", name_reg) if name_test.evaluate(with: password.text) == false { let alert = UIAlertController(title: "Information", message: "Enter the password in correct format", preferredStyle: .alert) let ok = UIAlertAction(title: "Ok", style: .default, handler: nil) let cancel = UIAlertAction(title: "Cancel", style: .default, handler: nil) alert.addAction(ok) alert.addAction(cancel) self.present(alert, animated: true, completion: nil) } } if (textField == email) { let name_reg = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}" let name_test = NSPredicate(format: "SELF MATCHES %@", name_reg) if name_test.evaluate(with: email.text) == false { let alert = UIAlertController(title: "Information", message: "Enter the E-mail in correct format", preferredStyle: .alert) let ok = UIAlertAction(title: "Ok", style: .default, handler: nil) let cancel = UIAlertAction(title: "Cancel", style: .default, handler: nil) alert.addAction(ok) alert.addAction(cancel) self.present(alert, animated: true, completion: nil) } } if (textField == phone) { let name_reg = "[0-9]{10}" let name_test = NSPredicate(format: "SELF MATCHES %@", name_reg) if name_test.evaluate(with: phone.text) == false { let alert = UIAlertController(title: "Information", message: "Enter your number in correct format", preferredStyle: .alert) let ok = UIAlertAction(title: "Ok", style: .default, handler: nil) let cancel = UIAlertAction(title: "Cancel", style: .default, handler: nil) alert.addAction(ok) alert.addAction(cancel) self.present(alert, animated: true, completion: nil) } } }