Firestore 崩溃

Crashes with Firestore

当我在集合中查询不存在的文档时,我仍然返回一个非 nil 对象,当我尝试调用 documentSnapshot?.data().

时它崩溃了

返回的错误是"Document '<FSTDocumentKey: XXXXXX>' doesn't exist. Check document.exists to make sure the document exists before calling document.data.'"

我发现这可以用一个漂亮的小守卫声明来解决:

guard (documentSnap?.exists ?? false), error == nil else { return }

这是此检查的一个工作示例:

func getUserData(uid: String, completion: @escaping(([String: Any]?, Error?)) -> ()) {

        let document = defaultStore.collection("user-data").document(uid)

        document.getDocument { (documentSnap, error) in

            guard (documentSnap?.exists ?? false), error == nil else {
                completion((nil, error))
                return
            }

            completion((documentSnap?.data(), error))
}}

我不知道你为什么要调用 .exists(),而且文档不仅仅是零,但这要么是学习曲线的一部分,要么是 Beta SDK 的产物

有无快照我是这样处理的。

func fetchCity(city: String, completion: @escaping (_ isSuccess: Bool, _ document: DocumentSnapshot?)->()){
            REF_CITIES.document(city).getDocument { (document, err) in
                if (document?.exists)! {
                    completion(true, document)
                }else {
                    print(err?.localizedDescription)
                    completion(false, nil)
                }
            }
        }

您只能将 .exists 用于 DocumentSnapshot。您不能将它用于 QuerySnapshot,因为 QuerySnapshot 实际上是多个 DocumentSnapshot。