URL имеет нулевое или процентное значение - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть этот URL

https://apps.apple.com/developer/john-doe/id32123123#see-all/mac-apps

Я делаю это

let path = "https://apps.apple.com/developer/john-doe/id32123123#see-all/mac-apps"
let url = URL(string: path!)

В результате url равен нулю.

Я делаю это:

var components = URLComponents()
components.scheme = "https"
components.host = "apps.apple.com"
components.path = "/developer/john-doe/id32123123#see-all/mac-apps"

let url = components.url!

Результирующий url процентный кодированный, как этот, и, как и следовало ожидать, URLRequest, выполненный с этим URL, завершается неудачей.

https://apps.apple.com/developer/john-doe/id32123123%23see-all/mac-apps

Есть ли способ получить нормальный URL без какой-либо процентной кодировки?

Как мне сделать URL, который работает с URLRequest?

1 Ответ

1 голос
/ 26 сентября 2019

Этот код работает просто отлично:

let path = "https://apps.apple.com/developer/john-doe/id32123123#see-all/mac-apps"
let url = URL(string: path)

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

Ваш последний метод не тот, который вам следует использовать для буквальных URL-адресов, подобных этому, но я могу объяснить, почему он все равно "не работает" в соответствии с вашими ожиданиями.# отмечает начало фрагмента URL.Это специальный символ, поэтому система кодирует его для вас в процентах, когда вы пытаетесь использовать его как часть пути.Вот фиксированный код:

var components = URLComponents()
components.scheme = "https"
components.host = "apps.apple.com"
components.path = "/developer/john-doe/id32123123"
components.fragment = "see-all/mac-apps"
let url = components.url! // => "https://apps.apple.com/developer/john-doe/id32123123#see-all/mac-apps"

Вы должны прочитать о стандарте URL.

...