Недопустимая 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 "существует", он "игнорируется".