我在我的项目中使用Firebase Firestore,我已经发现我需要使用@DocumentId来正确解码Firebase "_id"属性放入可编码结构体中。
我的问题是,我需要保存编码对象(目前我使用userdefaults),并在我的应用程序生命周期后重新解码对象。
当我用Firestore编码我的Firestore对象时。编码,它失去了id属性,因为它成为编码为[String: Any],所以当我试图解码提取的预编码对象,我无法这样做。
现在我单独存储ID属性,并在解码后将其重新添加到对象中。
这是处理Firestore可编码的正确方法吗?或者有一个更干净的方式来编码,然后解码Firestore编码对象?
此处讨论
解决方案是显式地要求的文档id包装DocumentReference,然后自己手动展开。看起来像是:
ref = try container.decode(DocumentID<DocumentReference>.self, forKey: .ref) .wrappedValue
还可以查看这些类似的案例以获取更多信息:
在Firestore中使用Codable时如何获得文档ID ?
使用自定义可解码的Firestore结构体解码时获取documententid
使用Swift Codable解码firestore文档时获取文档ID