Instantly share code, notes, and snippets.

Embed
What would you like to do?
import Foundation
class JSONDownloader {
let session: URLSession
init(configuration: URLSessionConfiguration) {
self.session = URLSession(configuration: configuration)
}
convenience init() {
self.init(configuration: .default)
}
typealias JSON = [String: AnyObject]
typealias JSONTaskCompletionHandler = (JSON?, ItunesError?) -> Void
func jsonTask(with request: URLRequest, completionHandler completion: @escaping JSONTaskCompletionHandler) -> URLSessionDataTask {
let task = session.dataTask(with: request) { data, response, error in
guard let httpResponse = response as? HTTPURLResponse else {
completion(nil, .requestFailed)
return
}
if httpResponse.statusCode == 200 {
if let data = data {
do {
let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: AnyObject]
completion(json, nil)
} catch {
completion(nil, .jsonConversionFailure)
}
} else {
completion(nil, .invalidData)
}
} else {
completion(nil, .responseUnsuccessful)
}
}
return task
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment