【发布时间】:2018-03-30 13:43:24
【问题描述】:
当符合Codable协议时,我不能轻易跳过非Codable类的可选属性
在Ride struct 中,我们要跳过driver 属性的encoding 和decoding,在解码时只保留nil:
struct Ride: Codable {
public var number: String
public var passenger: Passenger? // Codable conforming
public var driver: Driver? // NSObject subclass, doesn't conform to Codable
enum CodingKeys: String, CodingKey {
case number
case passenger
}
}
在这种情况下,我得到一个编译错误
类型“驱动程序”不符合协议“可解码”
到目前为止,我提供的唯一解决方案是通过提供以下方法手动编码和解码:
public init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
number = try? values.decode(String.self, forKey: .number)
passenger = try? values.decode(Passenger.self, forKey: .passenger)
}
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(number, forKey: .number)
try container.encode(passenger, forKey: .passenger)
}
还有其他方法可以跳过可选属性吗?使用更大的模型会更容易。
【问题讨论】:
-
这是一个错误,请看这条评论链:stackoverflow.com/questions/46104870/…
标签: json swift swift4 codable decodable