首页 > 解决方案 > 使用 Codable 时如何处理对 Firestore 字段的更改?

问题描述

如果您使用 Codable,处理向 Firestore 中的现有文档添加新属性的最佳方法是什么?

据我了解,该模型的第 2 版不会反序列化现有数据。那么在这种情况下,在第一个模型之后将任何新字段设为可选会更好吗?什么被认为是最佳实践?

版本 1

struct Book: Identifiable, Codable {
     @DocumentID var id: String?
     var pages: Int
}

版本 2

struct Book: Identifiable, Codable {
     @DocumentID var id: String?
     var pages: Int
     var chapters: Int //Should I make this optional?
}

标签: swiftfirebasegoogle-cloud-firestorecodable

解决方案


当然,此字段必须是可选类型,否则您的旧 json 值将无法解析。

还要从解码器中初始化这些值,以防您的底层结构发生变化。

public required init(from decoder: Decoder) throws {
    try super.init(from: decoder)
    let values = try decoder.container(keyedBy: CodingKeys.self)
    id = try? values.decode(String.self, forKey: .id)
    pages = try? values.decode(Int.self, forKey: .pages)
    chapters = try? values.decode(Int.self, forKey: .chapters)
}

推荐阅读