Skip to content

Instantly share code, notes, and snippets.

@donnywals
Created October 8, 2019 14:08
Show Gist options
  • Save donnywals/b8a70025cd18409950a99f08a1d3168f to your computer and use it in GitHub Desktop.
Save donnywals/b8a70025cd18409950a99f08a1d3168f to your computer and use it in GitHub Desktop.
import Foundation
@propertyWrapper
struct YMD {
var wrappedValue: Date?
}
extension YMD: Codable {
func encode(to encoder: Encoder) throws {
if let date = self.wrappedValue {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "YYYY/MM/dd"
let string = dateFormatter.string(from: date)
var container = try encoder.singleValueContainer()
try container.encode(string)
}
}
init(from decoder: Decoder) throws {
var container = try decoder.singleValueContainer()
let string = try container.decode(String.self)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "YYYY/MM/dd"
self.wrappedValue = dateFormatter.date(from: string)
}
}
struct Movie: Codable {
@YMD var released: Date?
}
let data = """
{
"released": "2019/11/15"
}
""".data(using: .utf8)!
let decoder = JSONDecoder()
let encoder = JSONEncoder()
do {
let movie = try decoder.decode(Movie.self, from: data)
print(movie)
let data = try encoder.encode(movie)
print(String(data: data, encoding: .utf8))
} catch {
print(error)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment