【发布时间】:2021-09-13 23:55:40
【问题描述】:
这是我的视图模型
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?
}
【问题讨论】:
-
您需要保留从列表中每个项目的偏移量到其在 Firestore 中的 ID 的映射。一旦你有了deleting the document 就很容易了。我还建议此时仅将其从数据库中删除,因为这本身会强制通过 SwiftUI 重新绘制 UI。
-
ViewModel 已经有一个 @DocumentID 的包装器我不太确定通过代码我应该做什么。我已经坚持了一段时间
-
@JustinComstock 你没有展示你的视图模型的代码或你的待办事项模型代码,所以很难说会发生什么。您可以通过执行以下操作将偏移量映射到待办事项:
offsets.map { viewModel.todos[$0] }。你能弄清楚如何从那里删除它们吗? -
@jnpdx 我添加了视图模型代码,我无法弄清楚其中的删除部分。带有偏移量和删除的代码会是什么样子?
-
您尚未添加视图模型代码,但我确实看到了
Todo模型。我会尝试在此基础上添加答案。
标签: firebase google-cloud-firestore swiftui swiftui-list