Я пытаюсь получить вызов API и знаю, что делать это с помощью urlComponents — хорошая техника. Тем не менее, я не очень понимаю, как это работает.
Вот мой звонок, который я хочу использовать: https://api.unsplash.com/search/photos?per_page=20;query=london&client_id=cn-xTwbvpcPUcpOgwJ2WIehB8UB641vs6GasCGMurzI
Вот мой звонок:
func fetchNews() {
var urlComponents = URLComponents()
urlComponents.scheme = "https"
urlComponents.host = "api.unsplash.com"
urlComponents.path = "search/photos?per_page=20"
urlComponents.queryItems = [.init(name: "client_id", value: "cn-xTwbvpcPUcpOgwJ2WIehB8UB641vs6GasCGMurzI"),
.init(name:"", value: "London")]
if let url = urlComponents.url {
performRequest(url)
print(url)
}
}
Что мне не хватает?
Почему вы хотите добавить элемент запроса, если его имя не указано?
Я не уверен, что URLComponents обрабатывает ; в URL...





Вам нужно отладить больше самостоятельно и проверить, где это не удается.
Давайте начнем с:
func fetchNews() {
var urlComponents = URLComponents()
urlComponents.scheme = "https"
urlComponents.host = "api.unsplash.com"
urlComponents.path = "search/photos?per_page=20"
urlComponents.queryItems = [.init(name: "client_id", value: "cn-xTwbvpcPUcpOgwJ2WIehB8UB641vs6GasCGMurzI"),
.init(name:"", value: "London")]
if let url = urlComponents.url {
performRequest(url)
print(url)
} else {
print("No URL")
}
}
Печатается «Нет URL».
Давайте вообще удалим queryItems, по-прежнему «Нет URL».
Давайте исправим это, добавив / перед путем.
И я получаю:
https://api.unsplash.com/search/photos%3Fper_page=20
Что я вижу в вашем коде и что мне не нравится: per_page=20 это элемент запроса, а для «Лондона» нет ключа, а процент результата вышел из ? раньше per_page. Так что удалите его, в конце концов, это единственный признак того, что после этого будет запрос.
Давайте изменим это на:
urlComponents.path = "/search/photos"
urlComponents.queryItems = [.init(name: "client_id", value: "cn-xTwbvpcPUcpOgwJ2WIehB8UB641vs6GasCGMurzI"),
.init(name:"query", value: "London"),
.init(name: "per_page", value: "20")]
Лучше, нет?
Выход:
https://api.unsplash.com/search/photos?client_id=cn-xTwbvpcPUcpOgwJ2WIehB8UB641vs6GasCGMurzI&query=London&per_page=20
НО, есть ";" в вашем URL, и это странно, непонятно. Вы можете добавить «,» после параметров 20, но порядок может быть импортирован для него, тогда как для запроса этого не должно быть, поскольку это доступ по ключу.
Как не работает ваш звонок? Что такое
performRequest?