Преобразование строки (содержит строку json) в NSURL в быстром - PullRequest
0 голосов
/ 07 мая 2018

У меня есть PAI Его реализовано в .NET.

один из URL веб-службы выглядит так

http://123.321.33/UploadCitizenImage?jsonString={\"Mobile\":\"12345678\", \"fileName\":\"7661832460_05072018.png\"} 

при преобразовании вышеуказанной строки в URL в swift приложение работает crash.

для получения дополнительной информации проверьте это
Error Screenshot

Ответы [ 3 ]

0 голосов
/ 07 мая 2018

Инициализатор URL(string:) возвращает необязательный , поскольку синтаксический анализ строки может завершиться неудачно. В этом случае nil возвращается. Это именно то, что происходит здесь, поскольку указанная вами строка не является допустимым URL-адресом: в запросе есть несколько символов, которые не разрешены и должны быть заменены: { как %7B, " как %22 , пробел как %20 и } как %7D.

Итак, инициализатор возвращает nil. Следующее, что вы делаете, это принудительное развертывание с помощью оператора !. Но принудительное развертывание nil является незаконным, и поэтому вы терпите крах.

Если вы хотите создать URL-адрес, обратитесь к классу URLComponents , который выполняет все необходимые экранирования, так что вам не нужно об этом заботиться. Свойство queryItems представляет особый интерес для вас, это массив URLQueryItem .

0 голосов
/ 07 мая 2018

Пожалуйста, сделайте что-нибудь подобное,

let jsonString = "jsonString={\"Mobile\":\"12345678\", \"fileName\":\"7661832460_05072018.png\"}" as String
let urlEncoadedJson = jsonString.addingPercentEncoding(withAllowedCharacters:.urlHostAllowed)
let urls = NSURL(string:"http://123.321.33/UploadCitizenImage?\(urlEncoadedJson ?? "")")

Сначала конвертируйте ваш json в кодированный Json, а затем добавьте в свой URL. Дайте мне знать, если есть какая-то проблема.

0 голосов
/ 07 мая 2018

Вы можете попробовать это,

let string = "http://123.321.33/UploadCitizenImage?jsonString={\"Mobile\":\"12345678\", \"fileName\":\"7661832460_05072018.png\"}"
let escapedString = string.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
let url = URL(string: escapedString!)!
print(url)

Вывод будет таким,

http://123.321.33/UploadCitizenImage?jsonString=%7B%22Mobile%22:%2212345678%22,%20%22fileName%22:%227661832460_05072018.png%22%7D
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...