Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct Youtube: Decodable {
- private enum RootKey: String, CodingKey {
- case snippet
- }
- private enum SnippetKeys: String, CodingKey {
- case date = "publishedAt"
- case title
- case description
- }
- let title: String?
- let description: String?
- let date: Date?
- init(from decoder: Decoder) throws {
- let container = try decoder.container(keyedBy: RootKey.self)
- let snippetContainer = try container.nestedContainer(keyedBy: SnippetKeys.self, forKey: .snippet)
- title = try snippetContainer.decode(String.self, forKey: .title)
- description = try snippetContainer.decode(String.self, forKey: .description)
- let dateString = try snippetContainer.decode(String.self, forKey: .date)
- let formatter = DateFormatter.mmmDDYYYY
- if let pubishedDate = formatter.date(from: dateString) {
- date = pubishedDate
- } else {
- throw DecodingError.dataCorruptedError(forKey: SnippetKeys.date, in: snippetContainer, debugDescription: "Date Not In Proper Format")
- }
- }
- }
- extension DateFormatter {
- static let mmmDDYYYY: DateFormatter = {
- let formatter = DateFormatter()
- formatter.dateFormat = "MMM-dd-yyyy"
- formatter.calendar = Calendar(identifier: .iso8601)
- formatter.timeZone = TimeZone(secondsFromGMT: 0)
- formatter.locale = Locale(identifier: "en_US_POSIX")
- return formatter
- }()
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement