Swift-JSONEncoder-在超类中单独编码日期字段

时间:2018-07-27 06:55:41

标签: json swift jsondecoder jsonencoder

我是Swift的新手,我正在尝试找到一种方法来为扩展Codable并为某些字段添加单独数据的类使用默认编码。

例如,我有一个Contact类,它扩展了Codable,其中有很多 字段,并且我希望对日期的编码与默认编码不同(默认情况下,JSONEcoder将日期作为时间戳记,但是我想使用其他格式) 为了简单起见,假设我的课程是:

class Contact:Codable {
    var name: String?
    var id: String?
    var birthdate: Date?
} 

对于自定义编码,我使用了以下链接:Using Decodable in Swift 4 with Inheritance

问题是我不想单独编码每个字段,因为默认编码会这样做。我只想仅将某些值添加到编码的json中。

我还找到了有关动态键的链接,但我不知道如何确切地使用它:https://gist.github.com/samwize/a82f29a1fb34091cd61fc06934568f82

可以做到吗?

1 个答案:

答案 0 :(得分:1)

如果您只是想对日期进行不同的编码,可以将dateEncodingStrategy中的JSONEncoder设置为预设值之一。

如果您的编码方式非常特殊,则可能需要将其设置为.customformatted

encoder.dateEncodingStrategy = .custom({
    date, encoder in
    ...
})
// or
let formatter = DateFormatter()
formatter.dateFormat = "some format"
encoder.dateEncodingStrategy = .formatted(formatter)