Swift 5 默认可解码实现,只有一个例外

iVe*_*tis 6 ios swift codable decodable swift5

有没有办法保留 Swift 对 Decodable 类的默认实现,其中只有 Decodable 对象但有一个例外?例如,如果我有一个这样的结构/类:

struct MyDecodable: Decodable {
   var int: Int
   var string: String
   var location: CLLocation
}
Run Code Online (Sandbox Code Playgroud)

我想使用默认解码intstringlocation自己解码。所以在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 #>
}
Run Code Online (Sandbox Code Playgroud)

mat*_*att 5

有没有办法保留 Swift 对 Decodable 类的默认实现,其中只有 Decodable 对象,但有一个例外

抱歉不行。要可解码,所有属性都必须是可解码的。如果您要编写自定义init,则必须自己初始化(并因此解码)所有属性。

Apple 知道这很痛苦,并且已经考虑过这个问题,但现在init对可解码器的自定义是全有或全无的。

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