Компоненты Url не отображают правильный URL-адрес swift

#swift

#swift

Вопрос:

Я пытаюсь получить вызов API, и я знаю, что выполнение этого с помощью URL-компонентов — хороший метод. Тем не менее, я не совсем понимаю, как это работает. Вот мой вызов, который я хочу использовать: https://api.unsplash.com/search/photos?per_page=20;query=londonamp;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)
    }
}
 

Чего мне не хватает?

Комментарии:

1. Как ваш вызов не работает? Что такое performRequest ?

2. Почему вы хотите добавить элемент запроса, где его имя оставлено пустым?

3. Я не уверен URLComponents , что обрабатывает ; URL-адреса…

Ответ №1:

Вам нужно больше отлаживать самостоятельно и проверять, где происходит сбой.

Давайте начнем с :

  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?per_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-xTwbvpcPUcpOgwJ2WIehB8UB641vs6GasCGMurzIamp;query=Londonamp;per_page=20
 

НО в вашем URL-адресе есть «;», и это странно, это неясно. Вы можете добавить «,» после 20 параметров, но order может импортировать для него, тогда как это не должно быть для запроса, поскольку это ключевой доступ.