Л
import Foundation
typealias Response = (Result<CodableProtocol, Error>) -> Void
class APIClient {
static let shared = APIClient()
private let session = URLSession.shared
func getWeather(completion: @escaping Response) {
let headers = [
"x-rapidapi-host": "weatherbit-v1-mashape.p.rapidapi.com",
"x-rapidapi-key": "e5383be9c1mshb69181b6433a8fcp173fb8jsn803ad90061ff"
]
let url = "https://weatherbit-v1-mashape.p.rapidapi.com/forecast/current"
guard var component = URLComponents(string: url) else {
completion(.failure(APIClientError.invalidComponent))
return
}
component.queryItems = [
URLQueryItem(name: "lat", value: "49.8419"),
URLQueryItem(name: "lon", value: "24.0315")
]
guard let urlComponent = component.url else {
completion(.failure(APIClientError.invalidURL))
return
}
var request = URLRequest(url: urlComponent)
request.httpMethod = APIRequest.get.rawValue
request.allHTTPHeaderFields = headers
session.dataTask(with: request, completionHandler: { data, response, error -> Void in
if let err = error {
completion(.failure(err))
return
}
do {
let weatherDecoded: CurrentWeather = try JSONDecoder().decode(CurrentWeather.self, from: data ?? Data())
completion(.success(weatherDecoded))
} catch {
completion(.failure(error))
// print(error.localizedDescription)
}
}).resume()
}
}