如何确保我的 guard 语句不会以 nil 值继续?



我一直在尝试实现一个守卫语句,我认为我的实现是正确的,除了我的代码运行超过守卫语句,即使我传入 nil 值也是如此。我基本上将字段留空并点击注册按钮来运行这段代码,但它为电子邮件和密码分配空值,并且代码直接通过"else"块运行。一些帮助将不胜感激。

guard let email = emailField.text, let password = passwordField.text, let name = nameField.text else {
print ("FYF: Form is not valid")
return
}
Auth.auth().createUser(withEmail: email, password: password, completion: { (user, error) in
if error != nil {
print(error!)
return
}

我在警卫语句中使用了一个断点并跨过它。当我检查变量检查器时,它说电子邮件和密码字段为零。我想我可能实施错了什么。谢谢!

你的代码是正确的,可能永远不会进入保护子句。在这里,您根据 UIText 字段设置变量的值。此字段为空时不为空。请务必了解空字符串与 null 值不是一回事。表示为 " 的空字符串仍然是字符串。空值就像JavaScript程序员喜欢谈论的那样:具有未定义的类型。仅当您尝试将非 nil 属性设置为 nil 值时,保护子句才会失败。

要解决此问题,您只需将保护子句更改为以下内容:

guard emailField.text.isEmpty == false, passwordField.text.isEmpty == false

guard !emailField.text.isEmpty, !passwordField.text.isEmpty

UITextfield如果未输入文本,则默认返回空字符串""。所以你的警卫声明将永远是真实的。

检查UITextfield是否不为空而不是为零,例如

guard let email = (emailField.text?.isEmpty == false ? tfTest1.text : nil) else {
print ("FYF: Form is not valid")
return
}

希望对您有所帮助!

最新更新