如何解决如何从 SwiftUI 的列表中删除 Firestore 文档
这是我的视图模型
import FirebaseFirestore
import FirebaseFirestoreSwift
struct Todo: Codable,Identifiable,Hashable {
@DocumentID var id: String?
var todoDetais: String?
}
var body: some View {
NavigationView {
List {
ForEach(viewmodel.todos,id: \.self) { todo in
vstack{
Text(todo.todoDetais!)
}
}
.onDelete(perform: delete)
}
我的获取数据和映射。
func fetchData() {
db.collection("todos").addSnapshotListener { (querySnapshot,error) in
guard let documents = querySnapshot?.documents else {
print("No documents")
return
}
self.todos = documents.map { (QueryDocumentSnapshot) -> Todo in
let data = QueryDocumentSnapshot.data()
let todoDetails = data["todo"] as? String ?? ""
return Todo(todoDetais: todoDetails)
}
}
}
删除逻辑,我可以从列表中删除,但如何从 Firestore 中删除?
func delete(at offsets: IndexSet) {
viewmodel.todos.remove(atOffsets: offsets)
//I need to delete a firestore document at the index im removing at?
}
解决方法
您可以通过执行以下操作将偏移量映射到您的 Todo
模型:
offsets.map { viewModel.todos[$0] }
因此,您的删除函数可能如下所示:
func delete(at offsets: IndexSet) {
offsets.map { viewModel.todos[$0] }.forEach { todo in
guard let todoID = todo.id else { return }
db.collection("todos").document(todoID).delete() { err in
if let err = err {
print("Error removing document: \(err)")
} else {
print("Document successfully removed!")
}
}
}
}
如果你有一堆,你可以考虑批处理请求,但这应该会让你开始。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。