Created
April 15, 2017 03:37
-
-
Save egcode/f37cfe1f936cb516b3791d82b6d97efc 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
import UIKit | |
//------------------------------------------------------------------------------- | |
//MARK: - API | |
class API { | |
enum Method:String { | |
case get = "GET" | |
case post = "POST" | |
case put = "PUT" | |
case delete = "DELETE" | |
} | |
typealias Response = (_ code: Int, _ object: Any?) -> Void | |
class func get(url: String, response: @escaping Response) { | |
self.request(method: .get, url: url) { (object, code, error) in | |
response(code, object) | |
} | |
} | |
class func post(url: String, payload: Any, response: @escaping Response) { | |
self.request(method: .post, url: url, payload: payload) { (object, code, error) in | |
response(code, object) | |
} | |
} | |
class func put(url: String, response: @escaping Response) { | |
self.request(method: .put, url: url) { (object, code, error) in | |
response(code, object) | |
} | |
} | |
class func delete(url: String, response: @escaping Response) { | |
self.request(method: .delete, url: url) { (object, code, error) in | |
response(code, object) | |
} | |
} | |
private class func request(method: Method, url: String, payload: Any? = nil, completionHandler: @escaping (Any?, Int, Error?) -> Swift.Void) { | |
guard let url = URL(string: url) else { | |
completionHandler(nil, -1, nil) | |
return | |
} | |
var request = URLRequest(url: url) | |
request.httpMethod = method.rawValue | |
if let dictPayload = payload as? [String: Any] { | |
request.httpBody = dictPayload.JSONData | |
} else if let arrayPayload = payload as? [Any] { | |
request.httpBody = arrayPayload.JSONData | |
} | |
let session = URLSession(configuration: URLSessionConfiguration.default) | |
let task = session.dataTask(with: request) { (data, response, error) in | |
var responseObject: Any? = nil | |
if let responseData = data { | |
if let obj = responseData.JSONObject { | |
responseObject = obj | |
} else if let image = UIImage(data: responseData) { | |
responseObject = image | |
} | |
} | |
DispatchQueue.main.async { | |
completionHandler(responseObject, (response as? HTTPURLResponse)?.statusCode ?? -1, error) | |
} | |
} | |
task.resume() | |
} | |
} | |
//------------------------------------------------------------------------------- | |
//MARK: - JSON | |
extension Data { | |
var JSONObject: Any? { | |
do { | |
return try JSONSerialization.jsonObject(with: self, options: []) | |
} catch { | |
//print("Problem de-serializing object: \(error)") | |
} | |
return nil | |
} | |
} | |
extension String { | |
var JSONObject: Any? { | |
guard let data = self.data(using: .utf8) else { | |
return nil | |
} | |
return data.JSONObject | |
} | |
} | |
extension Dictionary { | |
var JSONString: String? { | |
guard let data = self.JSONData else { | |
return nil | |
} | |
return String(data: data, encoding: String.Encoding.utf8) | |
} | |
var JSONData: Data? { | |
do { | |
return try JSONSerialization.data(withJSONObject: self, options: []) | |
} catch { | |
//print("Problem de-serializing object: \(error)") | |
} | |
return nil | |
} | |
} | |
extension Array { | |
var JSONString: String? { | |
guard let data = self.JSONData else { | |
return nil | |
} | |
return String(data: data, encoding: String.Encoding.utf8) | |
} | |
var JSONData: Data? { | |
do { | |
return try JSONSerialization.data(withJSONObject: self, options: []) | |
} catch { | |
//print("Problem de-serializing object: \(error)") | |
} | |
return nil | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment