Como converter uma sequência de datas com segundos fracionários opcionais usando Codable no Swift4
Estou substituindo meu antigo código de análise JSON pelo Swift's Codable e estou tendo um problema. Eu acho que não é tanto uma questão codificável como é uma questão DateFormatter.
Comece com uma estrutura
struct JustADate: Codable {
var date: Date
}
e uma string json
let json = """
{ "date": "2017-06-19T18:43:19Z" }
"""
agora vamos decodificar
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
let data = json.data(using: .utf8)!
let justADate = try! decoder.decode(JustADate.self, from: data) //all good
Mas se alterarmos a data para que ela tenha segundos fracionários, por exemplo:
let json = """
{ "date": "2017-06-19T18:43:19.532Z" }
"""
Agora quebra. As datas às vezes retornam com segundos fracionários e às vezes não. A maneira que eu costumava resolver isso era no meu código de mapeamento que eu tinha uma função de transformação que tentava os dois dateFormats com e sem os segundos fracionários. No entanto, não tenho muita certeza de como abordá-lo usando o Codable. Alguma sugestão?