微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从 SwiftUI 的列表中删除 Firestore 文档

如何解决如何从 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 举报,一经查实,本站将立刻删除。