Сообщаете, что API возвращает "Moe\'s Restaurant & Brewhouse"
. Скорее всего, вы смотрите на словарь Swift или что-то в этом роде, и он показывает вам строковое литеральное представление этой строки. Но в зависимости от того, как вы печатаете это, строка, скорее всего, не содержит обратную косую черту.
Рассмотрим следующий пример:
let string = "Moe's"
let dictionary = ["name": string]
print(dictionary)
Выведется:
[ "имя": "Moe \ 's"]
Он просто показывать "строку буквальное "представление. Как the documentation говорит:
Строковые литералы могут включать в себя следующие специальные символы:
- сбежавших специальных символов
\0
(нулевой символ), \\
(обратный слеш), \t
(горизонтальная табуляция), \n
(перевод строки), \r
(возврат каретки), \"
(двойные кавычки) и \'
(апостроф)
- произвольный скалярная Unicode, записывается в виде
\u{n}
, где n
является 1
- 8
шестнадцатеричный номер со значением равным действительной точки кода Unicode
Но, обратите внимание, что обратная косая черта перед '
в Moe\'s
не является частью строки, а скорее просто артефакт печати строкового литерала с эскапильным символом в нем.
Если вы:
let string2 = dictionary["name"]!
print(string2)
Он покажет вам, что есть на самом деле нет обратной косой черты есть:
Мо
Аналогично, если вы проверяете количество символов:
print(dictionary["name"]!.characters.count)
Он будет правильно сообщать, что есть только пять символов, а не шесть.
(Для чего это стоит, я думаю, что Apple сделала это намного более запутанным, чем это необходимо, потому что оно иногда печатает строки, как если бы они были строковыми литералами с обратными косыми чертами, а в других случаях - истинной базовой строкой. спутанность сознания, единственная кавычка может быть экранированы в строковый литерал, но не должно быть.)
Примечание, если ваша строка действительно имеет обратную косую черту в нем, вы правы, что это правильный способ его удаления:
someString.stringByReplacingOccurrencesOfString("\\", withString: "")
Но в этом случае я подозреваю, что обратная косая черта, которую вы видите, является артефактом того, как вы показываете ее, а не фактической обратной косой чертой в базовой строке.
Возможно, используйте код ascii? String (UnicodeScalar (92)) – Steve
Когда вы говорите, что получаете строку из API, какой тип строкового объекта вы получаете? Так как '\' 'является символом escape для swifts native' String', ваша строка '' Moe \'s Restaurant & Brewhouse'' будет использоваться для использования с родным быстрым 'String' be' 'Moe's Restaurant & Brewhouse''. Возможно, дайте нам еще больший контекст. – dfri