使用2种不同日期格式进行Swift可编码覆盖编码

6pp0gazn  于 2022-10-31  发布在  Swift
关注(0)|答案(2)|浏览(189)

我有一个符合Encodable的类,其中包含2个日期属性。当我将其编码为字符串时,我希望这2个日期使用不同的日期格式-例如
可选(“{\n“日期1”:“2022年10月24日22:03:43 Z”,\n“日期2”:”)
但我不知道如何做,下面是示例代码

func getString() -> String? {
    let encoder = JSONEncoder()
    encoder.outputFormatting = .prettyPrinted
    encoder.dateEncodingStrategy = .iso8601

    guard let data = try? encoder.encode(TwoDates()) else { return nil }
    guard let dataString = String(data: data, encoding: .utf8) else { return nil }
    return dataString
  }
class TwoDates: Encodable {
  public var date1 = Date()
  public var date2 = Date()

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    try? container.encode(date1, forKey: .date1)
    try? container.encode(date1, forKey: .date2)
  }

  enum CodingKeys: String, CodingKey {
    case date1 = "date1"
    case date2 = "date2"
  }
}

那么,如何为两个不同的属性使用不同的日期格式化程序呢?我应该以某种方式覆盖JSONEncoder.encode()吗?

oewdyzsn

oewdyzsn1#

您已经在对日期对象进行编码;听起来你想要的是解码成不同的格式。要做到这一点,只需覆盖你的解码并使用DateFormatter()对象。你可以在这里找到文档和示例https://developer.apple.com/documentation/foundation/dateformatter如果你想存档为另一个对象,你可以在编码覆盖中使用格式化程序。记住,这样的话负载会更大。

pqwbnv8z

pqwbnv8z2#

它实际上是如此简单,我不能相信它,只是需要提供编码的日期格式,即

try? container.encode(date1.iso8601String, forKey: .date1)

相关问题