#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.53. @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)}
?