annotate Simoleon/Helpers/NetworkHelper.swift @ 171:70f0625bfcf1

Merge pull request #17 from denniscm190/development open source project committer: GitHub <noreply@github.com>
author Dennis C. M. <dennis@denniscm.com>
date Tue, 12 Oct 2021 16:17:35 +0200
parents 0c589138a6f3
children
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
160
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
10 class NetworkHelper {
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
11 func httpRequest<T: Decodable>(url: String, model: T.Type, completion: @escaping (_ result: T) -> Void) throws {
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
12 // We take some model data T.Type
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
13 guard let url = URL(string: url) else { throw ErrorHandling.Networking.invalidURL }
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
14
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
15 let request = URLRequest(url: url)
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
16 URLSession.shared.dataTask(with: request) { data, response, error in
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
17 if let data = data {
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
18 do {
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
19 // Decode response with the model passed
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
20 let decodedResponse = try JSONDecoder().decode(model, from: data)
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
21 DispatchQueue.main.async {
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
22 completion(decodedResponse)
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
23 }
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
24 return
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
25 } catch {
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
26 // Return error regarding the escaping code
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
27 print(error)
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
28 }
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
29 }
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
30 // Error with the request
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
31 print("Fetch failed: \(error?.localizedDescription ?? "Unknown error")")
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
32 }
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
33 .resume()
156
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
34 }
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
35 }