Skip to content

Instantly share code, notes, and snippets.

@NickHung1982
Created December 2, 2018 15:30
Show Gist options
  • Save NickHung1982/db26ddc874ed58aa7e87b2d4d33df964 to your computer and use it in GitHub Desktop.
Save NickHung1982/db26ddc874ed58aa7e87b2d4d33df964 to your computer and use it in GitHub Desktop.
//
// HTTPNetworking.swift
// urlSessionDemo
//
// Created by Nick on 12/2/18.
// Copyright © 2018 NickOwn. All rights reserved.
//
import Foundation
import UIKit
protocol Networking {
typealias CompletionHandler = (Data?, URLResponse?, Error?) -> Void
func request(from currentVC:UIViewController, url:URL, completion:@escaping(_ data:Data?) ->() )
}
struct HTTPNetworking: Networking {
func request(from currentVC:UIViewController,url: URL, completion:@escaping (_ data:Data?) -> ()) {
let task = createDataTask(from: currentVC, url: url, completion: { data,response, error in
//if error, call handleError method
guard let httpResponse = response as? HTTPURLResponse, (200...299).contains(httpResponse.statusCode) else {
self.handleError(currentVC, response)
return
}
completion(data)
})
task.resume()
}
//handle server side error with alert view controller
func handleError(_ vc:UIViewController,_ response: URLResponse?) {
let alertVC = UIAlertController(title: "Error", message: "Something wrong", preferredStyle: .alert)
let action_OK = UIAlertAction(title: "Got it", style: .cancel, handler: nil)
alertVC.addAction(action_OK)
vc.present(alertVC, animated: true, completion: nil)
}
private func createDataTask(from currentVC:UIViewController, url:URL, completion:@escaping CompletionHandler) -> URLSessionTask{
return URLSession.shared.dataTask(with: url){ data, response, error in
completion(data, response, error)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment