我一直试图实现一个保护声明,我认为我的实现是正确的,除非我的代码超过了保护语句,即使我传入了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
}
我在守卫声明中使用断点并跨过它。当我检查变量检查器时,它说电子邮件和密码字段为零。我想我可能已经做错了。谢谢!
答案 0 :(得分:3)
您的代码是正确的,可能永远不会进入保护条款。在这里,您可以根据UIText字段设置变量值。空的此字段不为空。重要的是要理解空字符串与空值不同。表示为“”的空字符串仍然是一个字符串。像JavaScript编写者一样,null值是一个未定义的类型。只有当您尝试将非零属性设置为零值时,您的保护条款才会失败。
要解决此问题,您只需将保护条款更改为:
guard emailField.text.isEmpty == false, passwordField.text.isEmpty == false
或者
guard !emailField.text.isEmpty, !passwordField.text.isEmpty
答案 1 :(得分:0)
UITextfield
默认返回空字符串""
。所以你的警卫声明永远是真的。
检查UITextfield
是否为空而不是nil,例如
guard let email = (emailField.text?.isEmpty == false ? tfTest1.text : nil) else {
print ("FYF: Form is not valid")
return
}
希望它有所帮助!