Skip to content

Instantly share code, notes, and snippets.

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 feighter09/815c4a448c2d5001912f30fafd7eef41 to your computer and use it in GitHub Desktop.
Save feighter09/815c4a448c2d5001912f30fafd7eef41 to your computer and use it in GitHub Desktop.
import Alamofire
import SwiftyJSON
protocol NetworkRequest {
associatedtype ResponseType
// Required
var endpoint: String { get }
var responseHandler: NSData -> ResponseType? { get }
// Optional
var baseUrl: String { get }
var method: Alamofire.Method { get }
var encoding: ParameterEncoding { get }
var params: [String : AnyObject] { get }
var headers: [String : String] { get }
var networkClient: NetworkClientType { get }
}
extension NetworkRequest {
var url: String { return baseUrl + endpoint }
var baseUrl: String { return "http://httpbin.org/" }
var method: Alamofire.Method { return .GET }
var encoding: ParameterEncoding { return .JSON }
var params: [String : AnyObject] { return [:] }
var headers: [String : String] { return [:] }
var networkClient: NetworkClientType { return NetworkClient() }
}
extension NetworkRequest where ResponseType: JSONDecodable {
var responseHandler: NSData -> ResponseType? { return jsonResponseHandler }
}
private func jsonResponseHandler<Response: JSONDecodable>(data: NSData) -> Response?
{
let json = JSON(data: data)
return Response(json: json)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment