Ios 在使用领域数据库时,如何在Swift 4 Codable中处理JSON null大小写?

Ios 在使用领域数据库时,如何在Swift 4 Codable中处理JSON null大小写?,ios,swift,realm,codable,Ios,Swift,Realm,Codable,我正在使用Swift 4中的Codable以及Swift的领域数据库。 我正在使用的API将一些字段发送为null,如果我知道这些字段被称为可选的话,Codable可以处理这些字段,现在我不能这样做,因为@objc注释在RealmSwift 4中是强制性的,并且这些字段不能是可选的,必须用一些值初始化。如果我尝试这样做,它会说 属性无法标记为@objc,因为它的类型无法替换 在目标C中 下面是一些可编码类,它们也是领域对象类 class HUB: Object,Codable{ @ob

我正在使用Swift 4中的Codable以及Swift的领域数据库。 我正在使用的API将一些字段发送为null,如果我知道这些字段被称为可选的话,Codable可以处理这些字段,现在我不能这样做,因为@objc注释在RealmSwift 4中是强制性的,并且这些字段不能是可选的,必须用一些值初始化。如果我尝试这样做,它会说

属性无法标记为@objc,因为它的类型无法替换 在目标C中

下面是一些可编码类,它们也是领域对象类

class HUB: Object,Codable{

    @objc dynamic var hubId:String?
    @objc dynamic var lastKnownIp:String?
    @objc dynamic var lastKnownPort:Int = 0
    @objc dynamic var nodes:[Node]?

}
class Node:Object,Codable {
    @objc dynamic var appStatus:Int = 0
    @objc dynamic var apps:[NodeApp]?
}
如果上述任何值在JSON中为空,则Codable解码失败,并给出错误信息

valueNotFound(Swift.Int、Swift.DecodingError.Context)(编码路径: [[u JSONKey(stringValue:“索引0”,intValue:0), 编码键(stringValue:“节点”,intValue:nil),\u JSONKey(stringValue: “索引0”、intValue:0)、编码键(stringValue:“appStatus”, intValue:nil)],debugDescription:“预期的Int值为空 而不是。”,underyingerror:nil))


如何解决此问题?

如果属性可以是
nil
,则必须将其设置为可选
var-appStatus:Int?
。但是考虑重构数据库侧来存储非可选数据。我可以使它成为可选的,但是,王国抱怨,对应的对象C替换不能被发现,因为它与Objc无关。自realmswift 3.7.6起,objc是强制性的。我没有得到你的最后一部分?我如何做到这一点?我不熟悉领域,但我确信属性可以声明为不为
null
。对于整数,请尝试
NSNumber?
而不是
Int?
,如果这不起作用,则必须编写自定义初始值设定项来映射类型。JSONDecoder可以使用带解码器的重写init方法进行初始化。我用钥匙和非钥匙来制作容器。但是我们必须对每个字段都这样做,因为我们事先不知道哪个值是空的。这就是你所说的吗?如果你负责领域数据库模型,你应该知道哪些值可以是
null
。尽可能避免
null
值。