-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAPICaller.swift
88 lines (63 loc) · 2.58 KB
/
APICaller.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
//
// APICaller.swift
// Networking GET POST JSON
//
// Created by Віктор Бережницький on 28.05.2021.
//
import UIKit
class APICallers {
static let shared = APICallers()
private init() {}
private let url = URL(string: "https://...")!
private let token = "S3JNZ1kaG9HQ3h2NHYK..."
private let HTTPHeader = "X-API-Token"
public func makeRequest(url: URL?, token: String, HTTPHeader: String) -> URLRequest? {
if let url = url {
var request = URLRequest(url: url)
request.addValue(token, forHTTPHeaderField: HTTPHeader)
return request
}
return nil
}
// Main Function
public func getJSON<T: Decodable>(urlRequest: URLRequest, type: T.Type, completion: @escaping (Result<[T], Error>) -> Void) {
URLSession.shared.dataTask(with: urlRequest) { data, response, error in
if error == nil {
guard let jsonData = data else { return }
do {
let json = try JSONDecoder().decode([T].self, from: jsonData)
completion(.success(json))
} catch {
completion(.failure(error))
}
} else {
completion(.failure(error!))
}
}.resume()
}
public func getAllElementsSimple(urlRequest: URLRequest) {
URLSession.shared.dataTask(with: urlRequest) { data, response, error in
guard let jsonData = data, error == nil else { return }
do {
let stations = try JSONSerialization.jsonObject(with: jsonData, options: .allowFragments)
print(stations)
} catch {
print(error.localizedDescription)
}
}.resume()
}
func fetchImage(urlString: String, completionHandler: @escaping (UIImage) -> Void) {
guard let url = URL(string: urlString) else { return }
URLSession.shared.dataTask(with: url) { (data, response, error) in
if error == nil, data != nil {
guard let image = UIImage(data: data!) else {
completionHandler(UIImage(named: "Standart Image")!)
return
}
completionHandler(image)
} else {
completionHandler(UIImage(named: "Standart Image")!)
}
}.resume()
}
}