Created
December 2, 2018 15:30
-
-
Save NickHung1982/db26ddc874ed58aa7e87b2d4d33df964 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// 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