gpt4 book ai didi

ios - 编码协议(protocol)变量

转载 作者:行者123 更新时间:2023-11-29 05:26:50 26 4
gpt4 key购买 nike

假设我有这个提供变量的协议(protocol)

protocol Drivable { 
func drive()
var maximumSpeed: Double
}

extension Drivable {
public var maximumSpeed: Double { return 50.5}
}

以及一个符合以下条件的具体 Encodable 类:

class Car: Drivable, Encodable {
var manufacturer: String

func drive() {
print("Driving a car")
}
}

尝试使用 JSONEncoder().encode(myCar) 对类进行编码将导致 {"manufacturer:"Hyundai"},编码器不会对 maximumSpeed 由协议(protocol)提供默认值,仅当我实现编码和 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 并在每次类符合 Driveable 协议(protocol)时进行编码。如何为变量协议(protocol)提供默认的 CodingKeys 和编码?

最佳答案

JSONEncoder().encode() 自动使用存储的属性,而不是计算的属性,因此您需要将 maximumSpeed 属性添加到模型中:

class Car: Drivable, Encodable {
var manufacturer: String
var maximumSpeed: Double

func drive() {
print("Driving a car")
}
}

关于ios - 编码协议(protocol)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58081048/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com