Created
October 8, 2019 14:08
-
-
Save donnywals/b8a70025cd18409950a99f08a1d3168f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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