Advertisement
Guest User

Youtube API Date Decodable

a guest
Mar 10th, 2018
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.46 KB | None | 0 0
  1. struct Youtube: Decodable {
  2.     private enum RootKey: String, CodingKey {
  3.         case snippet
  4.     }
  5.     private enum SnippetKeys: String, CodingKey {
  6.         case date = "publishedAt"
  7.         case title
  8.         case description
  9.     }
  10.     let title: String?
  11.     let description: String?
  12.     let date: Date?
  13.    
  14.     init(from decoder: Decoder) throws {
  15.         let container = try decoder.container(keyedBy: RootKey.self)
  16.         let snippetContainer = try container.nestedContainer(keyedBy: SnippetKeys.self, forKey: .snippet)
  17.         title = try snippetContainer.decode(String.self, forKey: .title)
  18.         description = try snippetContainer.decode(String.self, forKey: .description)
  19.         let dateString = try snippetContainer.decode(String.self, forKey: .date)
  20.         let formatter = DateFormatter.mmmDDYYYY
  21.         if let pubishedDate = formatter.date(from: dateString)  {
  22.             date = pubishedDate
  23.         } else {
  24.             throw DecodingError.dataCorruptedError(forKey: SnippetKeys.date, in: snippetContainer, debugDescription: "Date Not In Proper Format")
  25.         }
  26.     }
  27. }
  28. extension DateFormatter {
  29.     static let mmmDDYYYY: DateFormatter = {
  30.         let formatter = DateFormatter()
  31.         formatter.dateFormat = "MMM-dd-yyyy"
  32.         formatter.calendar = Calendar(identifier: .iso8601)
  33.         formatter.timeZone = TimeZone(secondsFromGMT: 0)
  34.         formatter.locale = Locale(identifier: "en_US_POSIX")
  35.         return formatter
  36.     }()
  37. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement