предположим, у меня есть этот протокол, который предоставляет переменную
protocol Drivable {
func drive()
var maximumSpeed: Double
}
extension Drivable {
public var maximumSpeed: Double { return 50.5}
}
и конкретный кодируемый класс, который соответствует:
class Car: Drivable, Encodable {
var manufacturer: String
func drive() {
print("Driving a car")
}
}
Попытка кодировать класс с помощью JSONEncoder().encode(myCar)
приведет кв {"manufacturer:"Hyundai"}
кодер не будет кодировать maximumSpeed
, предоставляемый протоколом со значением по умолчанию, работает только тогда, когда я реализую кодирование и CodingKeys, например:
class Car: Drivable, Encodable {
var manufacturer: String
func drive() {
print("Driving a car")
}
private enum CodingKeys : String, CodingKey {
case manufacturer
// Protocol Variable Here
case maximumSpeed
}
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(manufacturer, forKey: .manufacturer)
try container.encode(maximumSpeed, forKey: .maximumSpeed)
}
}
Мне кажется, это не крутой подход, реализующий CodingKeysи кодировать каждый раз, когда класс соответствует Drivable Protocol.Как я могу предоставить стандартные CodingKeys и Encode для протокола переменных?