swift - 使用 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?
}
解决方案
当然,此字段必须是可选类型,否则您的旧 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)
}
推荐阅读
- java - Spring Boot 应用程序不以应用程序 lib 文件夹中的 logback EvaluatorFilter 和 Janino 库启动
- azure-devops - 注册环境失败
- javascript - 你如何在 react-quill 上只粘贴纯文本?
- python - 通过属性使用具有依赖属性的数据类
- php - Laravel 刀片未在特定页面上显示 CSS
- javascript - 包含选项不适用于 belongsTo 和 Sequelize
- python - 如何从图像测试文件夹中随机显示测试图像
- docker - Docker compose 服务通信
- python - 如何从自定义 COCO 数据集中保存图像,其注释覆盖在图像之上
- python - 现场直播 django KeyError,使用 pycharm 在车站上工作