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

Firebase Firestore Codable 为零

如何解决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)
    }

问题是当我尝试填充数组时模型为零。

enter image description here

我也尝试过没有 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 举报,一经查实,本站将立刻删除。