Firebase Firestore Codable 为零

Firebase Firestore Codable is nil

我有这个模型,我想从 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()

如果你想使用日期 属性 你可以在结构中包含一个初始化来处理那个

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()