gpt4 book ai didi

swift - 使用可选类型时的 RealmSwift 和 Codable

转载 作者:搜寻专家 更新时间:2023-10-31 22:17:49 24 4
gpt4 key购买 nike

我在一个项目中长期使用 RealmSwift 和 Codable,但是,我的 api 开发人员刚刚给了我两个新属性,它们只存在于对象的某些返回调用中。如果我调用 getUserInfo,我会收到一个没有这两个属性的 user model。在这种情况下,您可以在 codable 中使用 decodeIfPresent 并将数据类型设置为可选。然而,这两个字段是纪元时间值,使它们成为某种数字。 Realm 要求您的数据类型以 @objc 为前缀。

@objc dynamic var scanIn:Double = 0

当然,所有的数字基元都是这样工作的,但是它们中的 NONE 作为可选值工作。您必须使用 NSNumber 或类似的方式来使用 ObjC 的选项,但幸运的是,Codable 不适用于 NSNumber。我知道我在这里有很多不同的选择,但我真的在寻找简单快捷的东西,不需要我用映射重建整个模型或在收到它时转换所有内容。我现在会写一个解决方法,但我真的想让事情简单明了。

我尝试设置一个值,如果没有返回,只是使用像这样的非可选类型

scanIn = try container.decodeIfPresent(Double.self, forKey:.scanIn) ?? 0

但是,出于某种原因,这会将所有值设置为 0。我不知道它为什么这样做,但另一个开发人员建议它不能像那样在 codable 中工作,我不得不将 double 设置为可选。我想澄清一下,这个数字在转换前立即存在,但转换后为 0。

关于简单修复的任何想法?也许我做错了什么?

最佳答案

您可以使用 RealmOptional<Double>类型。

documentation 中所述:

Optional numeric types are declared using the RealmOptional type:

let age = RealmOptional<Int>()

RealmOptional supports Int, Float, Double, Bool, and all of the sized versions of Int (Int8, Int16, Int32, Int64).

关于swift - 使用可选类型时的 RealmSwift 和 Codable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51897335/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com