Это необходимый URL-адрес: http://api.openweathermap.org/ data/2.5/weather?q=Рим&APPID=MY_API_KEY. Вставленный в браузер и использующий настоящий ключ API, он работает и возвращает мне мой красивый JSON, полный информации о погоде в данном месте.
В своем приложении я могу вставить параметры как словарь, но я не могу найти способ добавить ключ API в конец URL-адреса.
Это мой маршрутизатор перечисления:
Код: Выделить всё
enum OWARouter: URLRequestConvertible {
case byCityName(parameters: Parameters)
// MARK: Url
static let baseURLString = "http://api.openweathermap.org"
static let apiKey = "MY_APY_KEY"
static let pathApiKey = "&APPID=\(apiKey)"
var method: HTTPMethod {
switch self {
case .byCityName:
return .get
}
}
var path: String {
switch self {
case .byCityName:
return "/data/2.5/weather"
}
}
// MARK: URLRequestConvertible
func asURLRequest() throws -> URLRequest {
let url = try OWARouter.baseURLString.asURL()
var urlRequest = URLRequest(url: url.appendingPathComponent(path))
switch self {
case .byCityName(let parameters):
urlRequest = try URLEncoding.default.encode(urlRequest, with: parameters)
print((urlRequest.url)!)
}
urlRequest.httpMethod = method.rawValue
return urlRequest
}
}
Что я делаю не так?
Я также провел уродливый тест, добавив этот код после печати:
Код: Выделить всё
var urlRequest2 = URLRequest(url: (urlRequest.url)!.appendingPathComponent(OWARouter.pathApiKey))
print("URL2: \(urlRequest2)")
Почему ключ API посередине?
Если вам нужен простой код запроса:
Код: Выделить всё
Alamofire.request(OWARouter.byCityName(parameters: ["q":"Rome"])).responseJSON { response in
print(response.request)
print(response.response)
print(response.data)
print(response.result)
debugPrint(response)
if let JSON = response.result.value {
print("json: \(JSON)")
}
}
Если я использую в качестве параметров ["q":"Рим, ИТ"], мой выходной URL-адрес: http://api.openweathermap. org/data/2.5/weather?q=Rome%2CIT
Как оставить запятую?
Подробнее здесь: https://stackoverflow.com/questions/413 ... parameters
Мобильная версия