如何解决Swift 5中的模型中声明了多个数据类型时如何设置值
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)
}
}
}
实际上,我已经将模型类声明为Int类型,但是从服务器端来看,有一段时间是Int值,有些时候是Double,所以我已经为各自的对象声明了这两种数据类型。
现在我想从BackApproved获得价值,它可以是int或double。我正在使用可编码协议。 那么如何实现这一目标,请帮助我。
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。