Недопустимая escape-последовательность в литерале: "b"
мне нужно иметь возможность создать строку, которая является "b"
. Но когда я пытаюсь, Xcode выдает ошибку времени компиляции: недопустимая escape-последовательность в литерале. Я не понимаю, почему, однако,"r"
работает просто отлично. Если я положу "b"
тогда это то, что на самом деле хранится в строке, что мне не нужно - мне нужна только одна обратная косая черта. Для меня это кажется быстрой странностью, потому что она отлично работает в Objective-C.
let str = "b" //Invalid escape sequence in literal
NSString *str = @"b"; //works great
мне нужно сгенерировать эту строку, потому что "b"
is единственный способ определить, когда пользователь нажал "удалить" при использовании UIKeyCommand
:
let command = UIKeyCommand(input: "b", modifierFlags: nil, action: "didHitDelete:")
как я могу обойти эту проблему?
EDIT: It действительно не хочет генерировать строку, которая является только "b"
, это не работает - он остается исходное значение:
var delKey = "rb"
delKey = delKey.stringByReplacingOccurrencesOfString("r", withString: "", options: .LiteralSearch, range: nil)
2 ответов
Swift эквивалент \b
is \u{8}
. Он сопоставляется с кодом управления ASCII 8, так же как \b
в Objective C. я протестировал это и обнаружил, что он отлично работает с UIKeyCommand
, в этот мой предыдущий ответ.
пример фрагмента:
func keyCommands() -> NSArray {
return [
UIKeyCommand(input: "\u{8}", modifierFlags: .allZeros, action: "backspacePressed")
]
}
Я не верю, что это поддерживается.
на основе документации Swifthttps://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/StringsAndCharacters.html:
строковые литералы могут содержать следующие специальные символы Юникода:
экранированные специальные символы \0 (нулевой символ), \ (обратная косая черта), \t (горизонтальная вкладка), \n (линия подачи), \r (возврат каретки), \ " (двойной цитата) и \' (одинарная кавычка)
произвольный скаляр Юникода, записанный как \u{n}, где n-от одной до восьми шестнадцатеричных цифр
ASCII для \b равно 8. Если вы сделаете следующее, Вы увидите эти результаты
let bs = "\u{8}"
var str = "Simple\u{8}string"
println(bs) // Prints ""
println("bs length is \(bs.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))") // Prints 1
println(str) // Prints Simplestring
let space = "\u{20}"
println(space) // Prints " "
println("space length is \(space.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))") // Prints 1
str = "Simple\u{20}string"
println(str) // Prints Simple string
похоже, что, пока ASCII 8 "существует", он "игнорируется".