2017-02-03 5 views
0

У меня есть x 2 вопроса об адресах и веб-видах.Почему я не могу преобразовать эту строку в URL?

Вопрос 1: У меня есть строка, которую я получаю от API, который должен быть URL-адресом. Строка https://godochurch.blob.core.windows.net/sermons/1031/30-1-2017-Vision Sunday-Devotion.mp3

При попытке конвертировать в URL-адрес я получаю нуль.

Вот код:

if let sermonUrl = sermonUrl { 

     if let url = URL(string: sermonUrl) { 

      let requestObj = URLRequest(url: url) 
      webView.loadRequest(requestObj) 

     } 
    } 

Я работал, что пространство между «видением» и «воскресенье» является проблемой.

Должен ли я каким-то образом кодировать строку, прежде чем пытаться преобразовать ее в URL? Что вводит в заблуждение, так это то, что если я вставляю строку в свой браузер, она работает нормально, но я замечаю, что браузер - это процентное кодирование пространства.

Если я должен кодировать строку, как мне это сделать?

Вопрос 2: Я вижу, что URL(string: "urlStringHere") доступен только с прошивки 10. Моего приложение должно работать прошивку 9. Как я могу преобразовать код выше, так что работает на прошивке 9 и 10.

Спасибо заранее для вашего времени.

+0

Вы уже проверили еще один код с этим кодом? –

+0

Да. На самом деле, если я вручную процитирую пробел для этого URL-адреса, представление открывается нормально. –

+0

Итак, сделайте так, чтобы ваш URL был пустым. –

ответ

2

1: избежать этого пространства с %20 или +:

if let url = URL(string: "https://godochurch.blob.core.windows.net/sermons/1031/30-1-2017-Vision%20Sunday-Devotion.mp3") { 
    // ... 
} 

2: URL был введен с Swift 3, который совместим с прошивкой 8 и более поздних версий. См. this question о том, как заставить его работать со старыми версиями iOS.


Edit: самый простой способ процентов, избежать URL является использование URLComponents:

var components = URLComponents(string: "https://godochurch.blob.core.windows.net")! 
components.path = "/sermons/1031/30-1-2017-Vision Sunday-Devotion.mp3" 

if let url = components.url { 
    // ... 
} 

Если вам случится, чтобы вы URL строки из веб-сервиса и содержит пробел, что сервис плохой. Пробел не указан в URL-адресе. Веб-браузеры расслабляют это правило, потому что они знают, что есть плохие URL-адреса. Свифт не возьмет его.

+0

Re 1: Хм, это не отвечает на мой вопрос. Я знаю, что мне нужно избежать пространства в строке, но как мне это сделать? Число рейнольдса 2: Спасибо! –

+0

Code Different показал вас в примере – FullMetalFist

+0

@Code Different, хорошо, вот что я искал. Спасибо. –