我怎样才能确保我的警卫声明没有进行零值?

时间:2017-07-01 22:12:24

标签: ios swift

我一直试图实现一个保护声明,我认为我的实现是正确的,除非我的代码超过了保护语句,即使我传入了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
        }

我在守卫声明中使用断点并跨过它。当我检查变量检查器时,它说电子邮件和密码字段为零。我想我可能已经做错了。谢谢!

2 个答案:

答案 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
    }

希望它有所帮助!