我RealmSwift在一个项目中使用和 Codable 已经很长时间了,但是,我的 api 开发人员只给了我两个仅存在于对象的某些返回调用中的新属性。如果我打电话getUserInfo,我会收到一个user model没有这两个属性的。在这种情况下,您将在 codable 中使用 decodeIfPresent 并将数据类型设置为可选。然而,这两个字段是纪元时间值,使它们成为某种数字。Realm 要求您的数据类型以@objc.
@objc dynamic var scanIn:Double = 0
Run Code Online (Sandbox Code Playgroud)
当然,所有数字原语都是这样工作的,但NONE其中的一些是作为可选项工作的。您必须使用NSNumber或类似的方式来使用可选项ObjC,但幸运的是,Codable它不适用于NSNumber. 我知道我在这里有很多不同的选择,但我真的在寻找一些简单快捷的东西,不需要我用映射重建整个模型或在我收到它时转换所有东西。我现在会写出一个解决方法,但我真的想让事情保持简单和干净。
如果没有返回,我尝试设置一个值,并且只使用像这样的非可选类型
scanIn = try container.decodeIfPresent(Double.self, forKey:.scanIn) ?? 0
Run Code Online (Sandbox Code Playgroud)
但是,出于某种原因,这会将所有值设置为 0。我不知道它为什么这样做,但另一位开发人员建议它不能在这样的可编码中工作,我不得不将 double 设置为可选。我想澄清一下,这个数字在转换之前就存在,但之后是 0。
关于简单修复的任何想法?也许我做错了什么?