我有一个函数来获取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)
}
}
}
1条答案
按热度按时间cxfofazt1#
尝试将异常作为流控制来处理是一个坏主意。请参阅以了解原因:Why not use exceptions as regular flow of control?
因此,与其处理
uid
为null或空时出现的异常,不如先检查它是否有值,然后仅在 * 如果 * 它有值时才调用Firestore API。不存在检查集合是否存在的特定操作。
相反,当您向集合中添加第一个文档时,集合就会存在,当您从中删除最后一个文档时,集合就会消失。
因此,要检查集合是否存在,最简单的方法是尝试从中读取单个文档。