Skip to content

Instantly share code, notes, and snippets.

@popochess
Last active May 28, 2017 10:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save popochess/76cf4de76b203b784041f5fe1c94dcc3 to your computer and use it in GitHub Desktop.
Save popochess/76cf4de76b203b784041f5fe1c94dcc3 to your computer and use it in GitHub Desktop.
Network Layer v2.0
import Foundation
import Alamofire
import SwiftyJSON
protocol NetworkRequest {
associatedtype ResponseType
var endpoint: String { get }
func jsonResponseHandler<ResponseType: JSONDecodable>(data: NSData) -> ResponseType?
var baseUrl: String { get }
var method: Alamofire.HTTPMethod { get }
var encoding: Alamofire.ParameterEncoding { get }
var parameters: [String : AnyObject]? { get }
var headers: [String : String] { get }
}
extension NetworkRequest {
var baseUrl: String { return "https://xxxx//api/v1" }
var url: String { return baseURL+endpoint }
var method: Alamofire.HTTPMethod { return .get }
var encoding: Alamofire.ParameterEncoding { return JSONEncoding.default }
var parameters: [String : AnyObject]? { return nil }
var headers: [String : String] { return ["Content-Type": "application/json","Accept": "application/json"] }
}
extension NetworkRequest {
func jsonResponseHandler<ResponseType: JSONDecodable>(data: NSData) -> ResponseType? {
let json = JSON(data: data as Data)
return ResponseType(json: json)
}
}
protocol NetworkLayerProcotol {
static func makeRequest<NetworkRequestGenericType: NetworkRequest>(networkRequest: NetworkRequestGenericType, completionHandler: @escaping (NSData?,Error?) -> Void)
}
struct NetworkLayer:NetworkLayerProcotol {
static func makeRequest<NetworkRequestGenericType: NetworkRequest> (networkRequest: NetworkRequestGenericType,completionHandler:@escaping (NSData?,Error?) -> Void) where NetworkRequestGenericType : NetworkRequest {
Alamofire.request(
networkRequest.url,
method: networkRequest.method,
parameters: networkRequest.parameters,
encoding: networkRequest.encoding,
headers: networkRequest.headers
).responseJSON { (response) -> Void in
debugPrint(response)
switch response.result {
case Result.success:
print("[API success]:\(String(describing: response.request?.url?.absoluteString))")
if let data = response.data {
completionHandler( data as NSData,nil)
}
break
case Result.failure(let encodingError):
print("[API error]:\(encodingError)")
if let resCode = response.response?.statusCode {
print(resCode)
}
break
completionHandler(nil,response.error!)
}
}
}
}
protocol JSONDecodable {
init?(json: JSON)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment