有没有办法保留 Swift 对只有可解码对象的可解码类的默认实现,只有一个例外? 因此,例如,如果我有一个这样的结构/类:
struct MyDecodable: Decodable {
var int: Int
var string: String
var location: CLLocation
}
我想对int
和string
使用默认解码,但location
自己解码。 所以在init(from decoder:)
,我希望有这样的东西:
required init(from decoder: Decoder) throws {
<# insert something that decodes all standard decodable properties #>
// only handle location separately
let container = try decoder.container(keyedBy: CodingKeys.self)
location = <# insert custom location decoding #>
}
没有办法保留 Swift 对只有可解码对象但有一个例外的可解码类的默认实现
不幸的是没有。要成为可解码的,所有属性都必须是可解码的。如果要编写自定义init
则必须自己初始化(并因此解码(所有属性。
苹果知道这是痛苦的,并且已经考虑了这个问题,但现在一个定制init
一个Decodable是全部或全无。
正如评论中所建议的那样,您可以通过将结构拆分为两种单独的类型来解决此问题。这样,您可以拥有一个只有一个属性的类型,您可以手动初始化它,然后就完成了。