Swift 5 默认 Decododable 实现,只有一个例外

Swift 5 Default Decododable implementation with only one exception

有没有办法保持 Swift 对 Decodable class 的默认实现,只有 Decodable 对象但有一个例外? 例如,如果我有这样的 struct/class:

struct MyDecodable: Decodable {
   var int: Int
   var string: String
   var location: CLLocation
}

我想对 intstring 使用默认解码,但我自己解码 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 #>
}

Is there a way to keep Swift's default implementation for a Decodable class with only Decodable objects but one exception

很遗憾没有。要可解码,所有属性都必须是可解码的。如果您要编写自定义 init,您必须自己初始化(并因此解码)所有属性。

A​​pple 知道这很痛苦,并且已经对此事进行了一些思考,但现在 Decodable 的自定义 init 要么全有要么全无。

正如评论中所建议的那样,您可以通过将结构拆分为两种不同的类型来解决此问题。这样你就可以拥有一个只有一个 属性 的类型,你手动初始化它,你就完成了。