我一直在尝试实现一个guard语句,我认为我的实现是正确的,除了我的代码运行通过了guard语句之外,即使我传入了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
}我在guard语句中使用了断点,并跳过了它。当我检查变量检查器时,它显示电子邮件和密码字段为零。我想我可能实现了一些错误的东西。谢谢!
发布于 2017-07-02 06:37:31
您的代码是正确的,并且可能永远不会进入guard子句。在这里,您正在设置变量的值,我认为是基于UIText字段。此字段为空时不为空。理解空字符串与空值不是一回事,这一点很重要。表示为"“的空字符串仍然是字符串。空值,就像JavaScript程序员喜欢说的那样:有一个未定义的类型。只有当您尝试将非nil属性设置为nil值时,guard子句才会失败。
要解决这个问题,您只需将您的保护子句更改为如下所示:
guard emailField.text.isEmpty == false, passwordField.text.isEmpty == false或
guard !emailField.text.isEmpty, !passwordField.text.isEmpty发布于 2017-07-02 06:45:34
如果未输入文本,则默认情况下UITextfield返回空字符串""。所以你的守卫声明将永远是正确的。
检查UITextfield是否不是空的,而不是nil。
guard let email = (emailField.text?.isEmpty == false ? tfTest1.text : nil) else {
print ("FYF: Form is not valid")
return
}希望它能帮上忙!
https://stackoverflow.com/questions/44865827
复制相似问题