swift 捕获以修复firebase“文档路径不能为空”

9wbgstp7  于 2022-12-21  发布在  Swift
关注(0)|答案(1)|浏览(159)

我有一个函数来获取convos,它工作了,但是我删除了firebase中的所有文档。所以现在当我运行它时,它说"文档路径不能为空",应用程序崩溃了。我对swift不是很熟悉,但是在python中我只是简单地使用了try和except。在try块中我可以简单地复制和粘贴我所有的代码。和except块我只是做我的错误处理。我不知道如何在swift中为我的整个函数做这件事。谁能告诉我如何重新排列我的函数,使函数体在do/try块中。还有,做我的错误处理最有策略的地方是什么,viewModel文件或服务文件-viewModel文件从服务文件继承函数
视图模型文件

func fetchConvos(){
        var userList: [User] = []
        service.getConversations() { users in
            userList = users
            userList.forEach { user in
                var messList: [Message] = []
              }

        }
    }

服务档桉

func getConversations(completion: @escaping([User]) -> Void){

            Firestore.firestore().collection("users")
                .document(uid)
                .collection("user-convo")
                .getDocuments { snapshot, _ in
                    guard let documents = snapshot?.documents else { return }
                    
                    documents.forEach { doc in
                        let userID = doc.documentID
                        
                        users.append(userID)
                        completion(users)
                            
                        
                    }
                }
        
    }
cxfofazt

cxfofazt1#

尝试将异常作为流控制来处理是一个坏主意。请参阅以了解原因:Why not use exceptions as regular flow of control?
因此,与其处理uid为null或空时出现的异常,不如先检查它是否有值,然后仅在 * 如果 * 它有值时才调用Firestore API。

if !(uid ?? "").isEmpty {
    Firestore.firestore().collection("users")
        .document(uid)
        .collection("user-convo")
        ...
}

不存在检查集合是否存在的特定操作。
相反,当您向集合中添加第一个文档时,集合就会存在,当您从中删除最后一个文档时,集合就会消失。
因此,要检查集合是否存在,最简单的方法是尝试从中读取单个文档。

Firestore.firestore().collection("users")
    .document("theUID")
    .collection("user-convo")
    .limit(to: 1) // 👈
    .getDocuments { snapshot, _ in
        if !snapshot!.isEmpty ... // 👈
    }

相关问题