Skip to content

Instantly share code, notes, and snippets.

@jeksys
Created March 13, 2019 22:57
Show Gist options
  • Select an option

  • Save jeksys/f1fe384397f57d737c32a8fc1bde7dfd to your computer and use it in GitHub Desktop.

Select an option

Save jeksys/f1fe384397f57d737c32a8fc1bde7dfd to your computer and use it in GitHub Desktop.
Encodable and Decodable helper extensions
extension String {
func parse<D>(to type: D.Type) -> D? where D: Decodable {
let data: Data = self.data(using: .utf8)!
let decoder = JSONDecoder()
do {
let _object = try decoder.decode(type, from: data)
return _object
} catch {
return nil
}
}
}
protocol StringEncodable: Encodable {
func asData() -> Data?
func asString() -> String?
}
extension StringEncodable{
func asString() -> String? {
guard let data = asData() else {
return nil
}
return String(data: data, encoding: .utf8)
}
func asData() -> Data? {
var jsonData = Data()
let jsonEncoder = JSONEncoder()
do {
jsonData = try jsonEncoder.encode(self)
}
catch {
}
return jsonData
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment