Skip to content

Instantly share code, notes, and snippets.

@mactive
Forked from StewartLynch/Bundle+Extension
Created June 11, 2022 13:12
Show Gist options
  • Save mactive/eb413bc939dec77b68138d3bb8178112 to your computer and use it in GitHub Desktop.
Save mactive/eb413bc939dec77b68138d3bb8178112 to your computer and use it in GitHub Desktop.
extension Bundle {
public func decode<T: Decodable>(_ type: T.Type,
from file: String,
dateDecodingStategy: JSONDecoder.DateDecodingStrategy = .deferredToDate,
keyDecodingStrategy: JSONDecoder.KeyDecodingStrategy = .useDefaultKeys) -> T {
guard let url = self.url(forResource: file, withExtension: nil) else {
fatalError("Failed to locate \(file) in bundle.")
}
guard let data = try? Data(contentsOf: url) else {
fatalError("Failed to load \(file) from bundle.")
}
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = keyDecodingStrategy
decoder.dateDecodingStrategy = dateDecodingStategy
guard let decodedData = try? decoder.decode(T.self, from: data) else {
fatalError("Failed to decode \(file) from bundle.")
}
return decodedData
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment