Ios 文本中的转义序列无效:“quot\b";

Ios 文本中的转义序列无效:“quot\b";,ios,string,swift,escaping,Ios,String,Swift,Escaping,我需要能够创建一个“\b”字符串。但当我尝试这样做时,Xcode抛出一个编译时错误:文本中的转义序列无效。我不明白为什么,“\r”工作得很好。如果我把“\\b”放在字符串中,那就是实际存储在字符串中的内容,这不是我所需要的-我只需要一个反斜杠。对我来说,这似乎是一个快速的奇怪现象,因为它在Objective-C中工作得很好 let str = "\b" //Invalid escape sequence in literal NSString *str = @"\b"; //works grea

我需要能够创建一个
“\b”
字符串。但当我尝试这样做时,Xcode抛出一个编译时错误:文本中的转义序列无效。我不明白为什么,
“\r”
工作得很好。如果我把
“\\b”
放在字符串中,那就是实际存储在字符串中的内容,这不是我所需要的-我只需要一个反斜杠。对我来说,这似乎是一个快速的奇怪现象,因为它在Objective-C中工作得很好

let str = "\b" //Invalid escape sequence in literal
NSString *str = @"\b"; //works great
我需要生成此字符串,因为
“\b”
是在使用
UIKeyCommand
时检测用户何时按下“delete”的唯一方法:

let command = UIKeyCommand(input: "\b", modifierFlags: nil, action: "didHitDelete:")
我如何解决这个问题

编辑:它确实不想生成一个只有
“\b”
的字符串,这不起作用-它保持原始值:

var delKey = "\rb"
delKey = delKey.stringByReplacingOccurrencesOfString("r", withString: "", options: .LiteralSearch, range: nil)

我认为它不被支持

根据Swift文件:

字符串文字可以包括以下特殊Unicode字符:

转义的特殊字符\0(空字符),\(反斜杠),\t (水平选项卡),\n(换行),\r(回车),\“(双 引号)和\'(单引号)

任意Unicode标量,写为 \u{n},其中n在一到八个十六进制数字之间

\b的ASCII为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“存在”,但它被“忽略”。

\b
的Swift等价物是
\u{8}
。它映射到ASCII控制代码8,就像目标C中的
\b
一样。我在中测试了这一点,并发现它与
UIKeyCommand
配合使用效果良好

示例代码段:

func keyCommands() -> NSArray {
    return [
        UIKeyCommand(input: "\u{8}", modifierFlags: .allZeros, action: "backspacePressed")
    ]
}

所以这在现在是不可能的,没有办法解决它?对不起,老兄,看起来是这样的。你想用退格做什么?也许有另一种方法可以通过使用隐藏的UITextFields之类的东西来伪装它。或者你可以试着通过尝试类似的东西来找出它的价值这:。您可以看到按backspace时返回的内容。顺便说一句,字符串替换不起作用,因为在Swift中,“\rb”是一个回车字符,后跟字母“b”(字面意思是字节0D 98)。该字符串中没有要替换的“r”。。。