當符合可編碼協議,我不能輕易跳過非可編碼類的可選屬性忽略可編碼對象非可編碼可選屬性
在Ride
結構我們要跳過編碼和解碼driver
屬性的和剛剛離開它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)
}
有另一種跳過可選屬性的方法?更大的模型會更容易。
這是一個錯誤,請參閱此評論鏈:https://stackoverflow.com/questions/46104870/swift-4-decodable-additional-variables/46105080#comment79173417_46105080 – Hamish