Json 如果在Swift 5的模型中声明了多个数据类型,如何设置值

Json 如果在Swift 5的模型中声明了多个数据类型,如何设置值,json,model,swift5,xcode11,codable,Json,Model,Swift5,Xcode11,Codable,实际上,我已经将模型类声明为Int-type,但从服务器端来看,有时是Int-value,有时是Double,所以我为各自的对象声明了这两种数据类型] 现在我想从BackApproved中获取值,它可以是int或double。我使用的是可编码协议。 那么如何做到这一点,请帮助我 谢谢您似乎已经知道如何做了,因为您在编码(to:)中已经做过一次。使用switch语句。如果是.double,请做些什么。如果它是.int,做点别的。不,不,我问的是如何得到这个值,我不知道它是double还是int之类

实际上,我已经将模型类声明为Int-type,但从服务器端来看,有时是Int-value,有时是Double,所以我为各自的对象声明了这两种数据类型]

现在我想从BackApproved中获取值,它可以是int或double。我使用的是可编码协议。 那么如何做到这一点,请帮助我


谢谢

您似乎已经知道如何做了,因为您在
编码(to:)
中已经做过一次。使用switch语句。如果是
.double
,请做些什么。如果它是
.int
,做点别的。不,不,我问的是如何得到这个值,我不知道它是double还是int之类的。object.backApproved类似于backApproved,因为它返回backapprovedquick,所以您需要检查它是double还是int。并在每种情况下执行不同的操作,就像您在
encode(to:)
中所做的一样。在这里,您得到的值为
x
。有一些示例代码用于执行相同的操作您自己编写的示例代码!查看
编码(to:)
方法!请参见每个
案例后的两行
?用值
x
替换这些值。而不是
switch self
,而是
switch object.backApproved
class LBSModel: Codable {
let  unApproved: Int?
let backApproved : BackApproved
enum CodingKeys: String, CodingKey {
    case unApproved = "UnApproved"
    case backApproved = "BackApproved"
}
init(unApproved: Int?, backApproved: BackApproved) {
    self.unApproved = unApproved
    self.backApproved = backApproved
}
}

enum BackApproved: Codable {
case double(Double)
case int(Int)

init(from decoder: Decoder) throws {
    let container = try decoder.singleValueContainer()
    if let x = try? container.decode(Double.self) {
        self = .double(x)
        return
    }
    if let x = try? container.decode(Int.self) {
        self = .int(x)
        return
    }
    throw DecodingError.typeMismatch(BackApproved.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Available"))
}

func encode(to encoder: Encoder) throws {
    var container = encoder.singleValueContainer()
    switch self {
    case .double(let x):
        try container.encode(x)
    case .int(let x):
        try container.encode(x)
    }
}
}