Как указано в Apple doc , если в строке есть несколько символов, которые недопустимы в URL, URL (строка :) возвращает ноль.В этом случае вам нужно% кодировать следующим образом.
let url = URL(string: "123\"456") // this returns nil due to double quote
Поэтому вам нужно mofify к
let url = URL(string: "123\"456".addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!)
Я столкнулся с той же проблемой, когда обрабатывал неанглийские буквы;для моего случая они "кандзи".Поэтому я всегда использую процентное кодирование без проверки содержимого строки при вызове URL (строка :).На самом деле, существует так много нелегальных URL-букв с кандзи, и почти невозможно проверить, что является законным, а что нет, вручную.URL (строка :) с процентной строкой при добавлении PercentEncoding (withAllowedCharacters: .urlHostAllowed) всегда хорошо работает для меня.