Skip to content

Instantly share code, notes, and snippets.

@vialyx
Created November 8, 2018 04:03
Show Gist options
  • Save vialyx/c5dc4110e54c6e458a4e45a7716d00a5 to your computer and use it in GitHub Desktop.
Save vialyx/c5dc4110e54c6e458a4e45a7716d00a5 to your computer and use it in GitHub Desktop.
import Foundation
// TODO: - Move to the separated file Resource.swift
struct Resource {
let url: URL
let method: String = "GET"
}
// TODO: - Move to the separated file GenericResult.swift
enum Result<T> {
case success(T)
case failure(Error)
}
enum APIClientError: Error {
case noData
}
// TODO: - Move to the separated file URLRequest+Resource.swift
extension URLRequest {
init(_ resource: Resource) {
self.init(url: resource.url)
self.httpMethod = resource.method
}
}
final class APIClient {
func load(_ resource: Resource, result: @escaping ((Result<Data>) -> Void)) {
let request = URLRequest(resource)
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
guard let `data` = data else {
result(.failure(APIClientError.noData))
return
}
if let `error` = error {
result(.failure(error))
return
}
result(.success(data))
}
task.resume()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment