模型已经用@DocumentID var id: String声明了?属性,以及在更新或删除方法时获得错误:
“没有更多上下文的表达方式是不明确的”
所有模型都采用相同的协议,这是泛型在传递obj时所期望的类型。
有人对如何从泛型中获取id有任何见解或想法吗?有人遇到过这个问题吗?
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).")
}
}
}
所有的洞察力和支持都非常感谢!谢谢!
发布于 2022-08-15 10:15:32
关于问题1:
我不会尝试创建一个泛型函数,而是在每个ViewModel (每个模型)中创建一个remove函数。除了您现在观察到的问题之外,还必须告诉firebase您希望在哪个集合中删除该项:
("collectionNameInFirebase") db.collection .document(documentID).delete()
折叠代码来自于firebase文档,您可以看到一个已定义的集合(在本例中为“城市”),函数调用中缺少该集合,即使您使其他内容正常工作,也必须添加此信息。
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中的城市示例匹配的示例如下:
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())下添加的示例函数相同。
最好,塞巴斯蒂安
https://stackoverflow.com/questions/73357765
复制相似问题