如何解决Firebase Firestore Codable 为零
我有这个模型,我想从 Firebase Firestore 获取结果。
struct Notification: Identifiable,Codable {
var id = UUID()
var type: String
var createdAt: Date
enum CodingKeys: String,CodingKey {
case id
case type
case createdAt //Firestore Timestamp
}
}
视图模型
self.notifications = snapshot.documents.compactMap { queryDocumentSnapshot -> Notification? in
print(try? queryDocumentSnapshot.data(as: Notification.self)) //nil
return try? queryDocumentSnapshot.data(as: Notification.self)
}
问题是当我尝试填充数组时模型为零。
我也尝试过没有 createdAt
(时间戳)但仍然失败。
这里有什么问题吗?
解决方法
您的 Notification 对象的 createdAt
属性是一个日期,而 Firestore 中存储的是一个时间戳
struct Notification: Identifiable,Codable {
var id = UUID()
var type: String
var createdAt: Date <- needs to be a Timestamp
您可以更改属性以匹配,或将 Firestore 时间戳转换为日期
let aDate = timestamp.dateValue()
如果你想使用 Date 属性,你可以在结构中包含一个 init 来处理这个
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
self.type = try values.decode(String.self,forKey: .type)
let ts = try values.decode(TimeStamp.self,forKey: .createdAt)
self.myDate = ts.dateValue()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。