Вы можете просто заменить эти обратные косые черты, например:
let string2 = string1.stringByReplacingOccurrencesOfString("\\", withString: "")
Но, если это возможно, вы действительно должны исправить это API, который возвращает эти обратные косые черты, так как это, очевидно, неправильно. Автору этого кода, по-видимому, было ошибочное впечатление, что передние косые черты должны быть экранированы, но это неверно.
Нижняя линия, API должен быть закреплен, чтобы не вставлять эти обратные косые черты, но до тех пор, пока это не будет исправлено, вы можете использовать приведенное выше, чтобы удалить любые обратные косые черты, которые могут возникнуть.
В обсуждении нижеприведенных комментариев, похоже, имеется огромная путаница в обратных косых чертах. Итак, давайте отступим на секунду и обсудим «строковые литералы». Как the documentation говорит, строка литерал:
Вы можете включать в себя предустановленные String
значения в коде как строковые литералы. Строковый литерал - это фиксированная последовательность текстовых символов, окруженная парой двойных кавычек (""
).
Примечание. Строковый литерал представляет собой просто представление определенной фиксированной последовательности символов в коде. Но это не следует путать с основным объектом String
. Основное различие между строковым литералом и базовым объектом String
состоит в том, что строковый литерал позволяет использовать обратную косую черту как символ «escape», используемый при представлении специальных символов (или для выполнения string interpolation).Как the documentation says:
Строковые литералы могут включать в себя следующие специальные символы:
- Экранированный специальные символы
\0
(нулевой символ), \\
(обратный слеш), \t
(горизонтальная табуляция), \n
(строки) , \r
(возврат каретки), \"
(двойные кавычки) и \'
(апостроф)
- произвольный скалярная Unicode, записывается в виде
\u{n}
, где n
является 1-8 шестнадцатеричный номер со значением равным действительной точки кода Unicode
Итак, вы правы, что в строковый литерал, как отрывок вы процитированном выше указывает, вы не можете иметь необработанный обратный слэш. Таким образом, всякий раз, когда вы хотите представить одиночную обратную косую черту в строковом литерале, вы представляете это с помощью \\
.
Таким образом, приведенное выше значение stringByReplacingOccurrencesOfString
означает «просмотрите string1
, найдите все вхождения одного обратного слэша и замените их пустой строкой (т. Е. Удалите обратную косую черту)».
Рассмотрим:
let string1 = "foo\\bar"
print(string1) // this will print "foo\bar"
print(string1.characters.count) // this will print "7", not "8"
let string2 = string1.stringByReplacingOccurrencesOfString("\\", withString: "")
print(string2) // this will print "foobar"
print(string2.characters.count) // this will print "6"
Немного смутно, если вы посмотрите на string1
в «Переменные» Вид «Debug» панели или в пределах игровой площадки, он будет показывать строкового литерала представление (то есть обратный слеш будет появляться как "\\"
). Но не путайте. Когда вы видите \\
в строковом литерале, на самом деле существует только одна обратная косая черта в текущей строке. Но если вы используете print
значение или посмотрите на фактические символы, в самой строке есть только одна обратная косая черта.
Вкратце, не сдерживайте экранирование обратной косой черты в строковом литерале (например, параметры до stringByReplacingOccurrencesOfString
) и одиночный обратный слэш, который существует в базовой строке.
Адрес, в котором находилась обратная косая черта? – matt
Извините, я не заметил, что обратная косая черта исчезла. Я добавил их в url. – marysmech