【问题标题】:Force Unwrapping a querySnapshot, Is there any better way to do this?强制展开查询快照,有没有更好的方法来做到这一点?
【发布时间】:2021-08-28 18:26:32
【问题描述】:

我是 swift & firebase 的新手,我有这个代码来检查我的 firebase 数据库中是否存在用户:

  COLLECTION_USERS.whereField("username", isEqualTo: username).getDocuments { (querySnapshot, error) in
        if let error = error {
            print("Error connecting to database")
        }
        else {
            if querySnapshot.isEmpty {

                print("SIGNED UP")
                
            }
        }
    }

这一行出现问题:

if querySnapshot.isEmpty {

我可以通过做来解决它,

if (querySnapshot!.isEmpty) {

这是一个好的做法吗? 我知道通常不建议强制展开某些东西,在这种情况下可以吗?还是有其他解决方案?

谢谢, 雅各布

【问题讨论】:

  • 你可以在错误分支中做同样的事情,但是错误是nil然后snapshot有一个值,反之亦然。顺便说一句,打印无意义的文字字符串而不是打印未包装的error 是非常糟糕的做法。在 Swift 中,不鼓励使用 snake_case 和 UPPERCASE 变量名。命名约定为lowerCamelCase

标签: swift firebase google-cloud-firestore


【解决方案1】:

更好的做法是检查参数是否为 nilguard
并且仅在此检查评估空性条件之后。

COLLECTION_USERS.whereField("username", isEqualTo: username).getDocuments { (querySnapshot, error) in
    if let error = error {
        print("Error connecting to database")
        return
    }

    guard let snapshot = querySnapshot else {
        print("Error retrieving data")
        return
    }

    if snapshot.isEmpty {
        print("SIGNED UP")
    }
}

【讨论】:

    【解决方案2】:

    看起来可以接受,它只是强制假设存在的值应该首先被错误捕获。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多