Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.55 KB | None | 0 0
  1. @discardableResult
  2. private class func request<T: JSONCodable>(urlRequest: URLRequest, router: Router?, completion: @escaping RequestCompletion<T>) -> URLSessionDataTask? {
  3.     let dataTask = URLSession.shared.dataTask(with: urlRequest) { data, response, error in
  4.         DispatchQueue.global(qos: .background).async {
  5.             self.handleResponse(data: data, response: response, error: error, router: router, completion: completion)
  6.         }
  7.     }
  8.  
  9.     dataTask.resume()
  10.  
  11.     return dataTask
  12. }
  13.  
  14. private class func handleResponse<T: JSONCodable>(data: Data?, response: URLResponse?, error: Error?, router: Router?, completion: @escaping RequestCompletion<T>) {
  15.     var responseObject: T?
  16.    
  17.     do {
  18.         responseObject = try T(json: json)
  19.     } catch {
  20.         handleResult(result: .failure(error), response: nil, completion: completion)
  21.         return
  22.     }
  23.    
  24.     if let responseObject = responseObject {
  25.         handleResult(result: .success(responseObject), response: response, completion: completion)
  26.     } else {
  27.         handleResult(result: .failure(NetworkResponse.unableToDecode), response: response, completion: completion)
  28.     }
  29. }
  30.  
  31. private class func handleResult<T: JSONCodable>(result: Result<T, Error>, response: HTTPURLResponse?, completion: @escaping RequestCompletion<T>) {
  32.     DispatchQueue.main.async {
  33.         switch result {
  34.         case .success(let result):
  35.             completion(.success(result), response)
  36.         case .failure(let error):
  37.             completion(.failure(error), response)
  38.         }
  39.     }
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement