Поток 1: ТОЧКА ПРЕРЫВАНИЯ (код=1, подкод=0x19f2338f4) для URL в swift

#ios #swift #xcode #nsurl

Вопрос:

Я новичок в swift .Я получил это api от почтальона .Я пытаюсь вызвать это, но получаю структуру приложения этой строки

 var request = URLRequest(url: URL(string: url)!,timeoutInterval: Double.infinity)
 

выдача ошибки в URL(строка: url)! является :

Поток 1: ТОЧКА ПРЕРЫВАНИЯ (код=1, подкод=0x19f2338f4)

Вот полная функция почтальона

 func apiCall(url:String)  {


    var semaphore = DispatchSemaphore (value: 0)

   //compiler struck on this line below

    var request = URLRequest(url: URL(string: url)!,timeoutInterval: Double.infinity)
    request.httpMethod = "GET"

    let task = URLSession.shared.dataTask(with: request) { data, response, error in
      guard let data = data else {
        print(String(describing: error))
        semaphore.signal()
        return
      }
      print(String(data: data, encoding: .utf8)!)
      semaphore.signal()
    }

    task.resume()
    semaphore.wait()

}
 

Это дает ошибку

Вот вызов функции

  apiCall(url: urlEncode)
 

Как я могу освободить свой код от этой ошибки ?
Я искал в Интернете и stackoverflow, но не решил эту проблему.

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

1. Есть ли в консоли какое-либо сообщение об ошибке, например «принудительное разворачивание»? Я бы сказал, что URL(string: url) это ноль, и потому что вы силой развернули его ! (что означает сбой, если он равен нулю, потому что я заверил вас, что это не так)… В чем заключается ценность url ? В нем есть недопустимые символы, такие как пробелы и т. Д., Которые Необходимо удалить в процентах.

2. У тебя неверный URL-адрес. Возможно, вам придется его закодировать. И не используйте семафоры, чтобы заставить асинхронную задачу стать синхронной. Узнайте, как работает асинхронная обработка данных, или примите новый async/await шаблон Swift 5.5

3. @Larme я проверил этот URL на почтальоне, который дал успешный ответ

4. И удалите или измените аргумент timeoutInterval, вы не хотите так долго ждать, если есть проблема с сервером или подключением.

5. @frincit, если вы попытаетесь вставить этот URL-адрес в веб-браузер, он изменит пробелы на » «, я думаю, что Почтальон тоже скрывает какой-то скрытый процент. Если ты мне не веришь, все в порядке. Если вы не хотите просто проверить: if let urlAsURL = URL(string: url) { print("It's valid URL) } else { print("it needs some works for: (url)} ?