首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从CRUD的Firebase Firestore的通用快速声明中获取@DocumentID的问题

从CRUD的Firebase Firestore的通用快速声明中获取@DocumentID的问题
EN

Stack Overflow用户
提问于 2022-08-15 07:01:17
回答 1查看 88关注 0票数 0

模型已经用@DocumentID var id: String声明了?属性,以及在更新或删除方法时获得错误:

“没有更多上下文的表达方式是不明确的”

所有模型都采用相同的协议,这是泛型在传递obj时所期望的类型。

有人对如何从泛型中获取id有任何见解或想法吗?有人遇到过这个问题吗?

代码语言:javascript
运行
复制
func remove(_ obj:T)
{
    guard let documentID = obj.dataObject.id else { return }
    
    self.collection.document(documentID).delete
    {
        error in
        if let error = error
        {
            print("Unable to remove \(error.localizedDescription).")
            
        }
    }
}

所有的洞察力和支持都非常感谢!谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-08-15 10:15:32

关于问题1:

我不会尝试创建一个泛型函数,而是在每个ViewModel (每个模型)中创建一个remove函数。除了您现在观察到的问题之外,还必须告诉firebase您希望在哪个集合中删除该项:

("collectionNameInFirebase") db.collection .document(documentID).delete()

折叠代码来自于firebase文档,您可以看到一个已定义的集合(在本例中为“城市”),函数调用中缺少该集合,即使您使其他内容正常工作,也必须添加此信息。

代码语言:javascript
运行
复制
private func deleteDocument() {
    // [START delete_document]
    db.collection("cities").document("DC").delete() { err in
        if let err = err {
            print("Error removing document: \(err)")
        } else {
            print("Document successfully removed!")
        }
    }
    // [END delete_document]
}

关于问题2:

我的类从创建常量开始,以便在整个类中使用防火墙。与问题1中的城市示例匹配的示例如下:

代码语言:javascript
运行
复制
import Swift
import Firebase
import FirebaseFirestore
import FirebaseFirestoreSwift

class CitiesViewModel: ObservableObject {
  
   let db = Firestore.firestore()
   let storage = Storage.storage()

   // ... [a lot of other stuff] ...

   private func deleteDocument(cityDocumentID: String) {
       // [START delete_document]
       db.collection("cities").document(cityDocumentID).delete() { err in
           if let err = err {
               print("Error removing document: \(err)")
           } else {
               print("Document successfully removed!")
           }
       }
    // [END delete_document]
   }

   // ... [some more stuff] ...

}

稍后,您只需在创建的函数中使用db,与我在问题1 (deleteDocument())下添加的示例函数相同。

最好,塞巴斯蒂安

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

https://stackoverflow.com/questions/73357765

复制
相关文章

相似问题

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