annotate Simoleon/Helpers/NetworkHelper.swift @ 156:84137052813d

Refactor code
author Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
date Sat, 28 Aug 2021 11:15:25 +0100
parents
children 0c589138a6f3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
156
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
1 //
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
2 // Request.swift
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
3 // Simoleon
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
4 //
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
5 // Created by Dennis Concepción Martín on 20/07/2021.
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
6 //
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
7
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
8 import Foundation
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
9
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
10 // MARK: - HTTP Request
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
11 func httpRequest<T: Decodable>(url: String, model: T.Type, completion: @escaping (_ result: T) -> Void) {
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
12
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
13 // We take some model data T.Type
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
14 guard let url = URL(string: url) else {
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
15 print("Invalid URL")
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
16 return
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
17 }
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
18
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
19 let request = URLRequest(url: url)
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
20 URLSession.shared.dataTask(with: request) { data, response, error in
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
21 if let data = data {
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
22 do {
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
23 // Decode response with the model passed
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
24 let decodedResponse = try JSONDecoder().decode(model, from: data)
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
25 DispatchQueue.main.async {
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
26 completion(decodedResponse)
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
27 }
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
28 return
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
29 } catch {
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
30 // Return error regarding the escaping code
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
31 print(error)
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
32 }
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
33 }
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
34 // Error with the request
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
35 print("Fetch failed: \(error?.localizedDescription ?? "Unknown error")")
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
36 }
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
37 .resume()
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
38 }