首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >怎样才能确保我的guard语句不会以nil值继续呢?

怎样才能确保我的guard语句不会以nil值继续呢?
EN

Stack Overflow用户
提问于 2017-07-02 06:12:24
回答 2查看 502关注 0票数 1

我一直在尝试实现一个guard语句,我认为我的实现是正确的,除了我的代码运行通过了guard语句之外,即使我传入了nil值。我基本上保持字段为空,并点击注册按钮来运行这段代码,但它会将空值分配给电子邮件和密码,并且代码会直接经过"else“块。如果能得到一些帮助,我们将不胜感激。

代码语言:javascript
复制
    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语句中使用了断点,并跳过了它。当我检查变量检查器时,它显示电子邮件和密码字段为零。我想我可能实现了一些错误的东西。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-02 06:37:31

您的代码是正确的,并且可能永远不会进入guard子句。在这里,您正在设置变量的值,我认为是基于UIText字段。此字段为空时不为空。理解空字符串与空值不是一回事,这一点很重要。表示为"“的空字符串仍然是字符串。空值,就像JavaScript程序员喜欢说的那样:有一个未定义的类型。只有当您尝试将非nil属性设置为nil值时,guard子句才会失败。

要解决这个问题,您只需将您的保护子句更改为如下所示:

代码语言:javascript
复制
guard emailField.text.isEmpty == false, passwordField.text.isEmpty == false

代码语言:javascript
复制
guard !emailField.text.isEmpty, !passwordField.text.isEmpty
票数 3
EN

Stack Overflow用户

发布于 2017-07-02 06:45:34

如果未输入文本,则默认情况下UITextfield返回空字符串""。所以你的守卫声明将永远是正确的。

检查UITextfield是否不是空的,而不是nil。

代码语言:javascript
复制
    guard let email = (emailField.text?.isEmpty == false ? tfTest1.text : nil) else {
        print ("FYF: Form is not valid")
        return
    }

希望它能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44865827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档