такая ошибка "The data couldn’t be read because it isn’t in the correct format." Вот мой код:
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()
}
}
у тебя с запросом что то неверно - ты видел, что тебе возвращает сервак? <html> <head><title>500 Internal Server Error</title></head> <body bgcolor="white"> <center><h1>500 Internal Server Error</h1></center> <hr><center>openresty/1.11.2.2</center> </body> </html>
Я в postman’e тестил и все работало
Перед do в твоем коде добавь эти строки и ты увидишь, что тебе отвечает сервер let str = String(decoding: data!, as: UTF8.self) print(str)
Окей, спасибо, посмотрю
Можешь просто в терминале запускать - тот же ответ curl --location --request GET 'https://weatherbit-v1-mashape.p.rapidapi.com/forecast/current' \ --header 'x-rapidapi-host: weatherbit-v1-mashape.p.rapidapi.com' \ --header 'x-rapidapi-key: e5383be9c1mshb69181b6433a8fcp173fb8jsn803ad90061ff'
Но я все равно не понимаю как это решить?
показывай запрос постмана который работал. МОжно в личку
у меня работает без forecast в урле - let url = "https://weatherbit-v1-mashape.p.rapidapi.com/current"
Обсуждают сегодня