如何将 ViewModel 的 ID 映射到 Firestore 中的文档 ID?
Posted
技术标签:
【中文标题】如何将 ViewModel 的 ID 映射到 Firestore 中的文档 ID?【英文标题】:How do I map my ViewModel's ID to the Document ID in Firestore? 【发布时间】:2021-07-01 05:24:03 【问题描述】:我在这里有获取数据代码,但我不明白在不将 ID 设置为文档 ID 的情况下如何删除文档。我在这里学习本教程。 https://medium.com/swift-productions/swiftui-easy-to-do-list-with-firebase-2637c878cf1a 我假设我需要在数据映射中这样做,但我不明白如何使用这段代码。我想从 SwiftUI 列表中删除一个待办事项,并删除它的整个 Firestore 文档。
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)
查看模型
struct Todo: Codable, Identifiable
var id: String = UUID().uuidString
var todoDetais: String?
【问题讨论】:
为什么不想使用文档 ID?您将需要某种标识符。最好的办法是在 Firestore 文档中添加所需的 UID。然后,当首先删除时,您必须获取该文档 ID,然后删除,这使其成为一个两步过程。我建议在模型中添加文档 ID,例如return Todo(todoDetais: todoDetails, firestoreID: docID)
,以便我可以在需要时访问它。
我仍然不确定这如何将视图模型的 ID 映射到 Firestore 的文档 ID。 @Dharmaraj
【参考方案1】:
我建议使用 Codable 将您的 Firestore 文档映射到 Swift 结构。这将使您的代码更容易编写,更不容易出错,并且更安全。
具体来说,它还允许您使用 @DocumentID
将 Firestore 文档 ID 映射到 Swift 结构的 id
属性。
这是一个简单的例子:
struct Book: Codable
@DocumentID var id: String?
var title: String
var numberOfPages: Int
var author: String
func fetchBook(documentId: String)
let docRef = db.collection("books").document(documentId)
docRef.getDocument document, error in
if let error = error as NSError?
self.errorMessage = "Error getting document: \(error.localizedDescription)"
else
if let document = document
do
self.book = try document.data(as: Book.self)
catch
print(error)
有关更多详细信息,请参阅this comprehensive guide 我写的关于将 Firestore 文档映射到 Swift 结构(以及返回)的文章。
有关如何从 SwiftUI 应用中删除 Firestore 文档的更多信息,请查看this article
【讨论】:
以上是关于如何将 ViewModel 的 ID 映射到 Firestore 中的文档 ID?的主要内容,如果未能解决你的问题,请参考以下文章
将表数据映射到 asp .Net MVC 中的 ViewModel 列表
如何使用 Knockout Mapping 将一个属性映射到另一个属性?
如何通过代码将 Id 映射到 NHibernate 映射中的私有支持字段?
Kendo UI - 如何使用 Kendo MVVM 将选中的属性(属性)和处理复选框的单击事件绑定到 viewModel