Swift - JSONEncoder - 在超级 class 中单独编码日期字段
Swift - JSONEncoder - encode date fields separately in a super class
我是 swift 的新手,我正在尝试找到一种方法来使用 class 的默认编码,扩展 Codable 并为某些字段添加单独的数据。
例如,我有一个扩展 Codable 的 class 联系人,有很多
字段,我想对日期进行不同于默认的编码(默认情况下,JSONEcoder 将日期作为时间戳,但我想使用不同的格式)
为简单起见,假设我的 class 是:
class Contact:Codable {
var name: String?
var id: String?
var birthdate: Date?
}
对于自定义编码,我使用了这个 link:Using Decodable in Swift 4 with Inheritance
问题是我不想单独编码每个字段,因为默认编码会这样做。我只想将某些值添加到编码的 json。
我还发现了这个关于动态键的 link 但我不知道如何使用它:https://gist.github.com/samwize/a82f29a1fb34091cd61fc06934568f82
这可以做到吗?
如果您只想对日期进行不同的编码,您可以将 JSONEncoder
的 dateEncodingStrategy
设置为预设值之一。
如果您的编码方式非常特殊,您可能希望将其设置为.custom
或formatted
。
encoder.dateEncodingStrategy = .custom({
date, encoder in
...
})
// or
let formatter = DateFormatter()
formatter.dateFormat = "some format"
encoder.dateEncodingStrategy = .formatted(formatter)
我是 swift 的新手,我正在尝试找到一种方法来使用 class 的默认编码,扩展 Codable 并为某些字段添加单独的数据。
例如,我有一个扩展 Codable 的 class 联系人,有很多 字段,我想对日期进行不同于默认的编码(默认情况下,JSONEcoder 将日期作为时间戳,但我想使用不同的格式) 为简单起见,假设我的 class 是:
class Contact:Codable {
var name: String?
var id: String?
var birthdate: Date?
}
对于自定义编码,我使用了这个 link:Using Decodable in Swift 4 with Inheritance
问题是我不想单独编码每个字段,因为默认编码会这样做。我只想将某些值添加到编码的 json。
我还发现了这个关于动态键的 link 但我不知道如何使用它:https://gist.github.com/samwize/a82f29a1fb34091cd61fc06934568f82
这可以做到吗?
如果您只想对日期进行不同的编码,您可以将 JSONEncoder
的 dateEncodingStrategy
设置为预设值之一。
如果您的编码方式非常特殊,您可能希望将其设置为.custom
或formatted
。
encoder.dateEncodingStrategy = .custom({
date, encoder in
...
})
// or
let formatter = DateFormatter()
formatter.dateFormat = "some format"
encoder.dateEncodingStrategy = .formatted(formatter)