文字中的转义序列无效:" \ b"

时间:2014-12-08 01:21:59

标签: ios string swift escaping

我需要能够创建一个"\b"的字符串。但是当我尝试时,Xcode会抛出编译时错误:文字中的转义序列无效。我不明白为什么,"\r"工作正常。如果我把"\\b"放在那个实际存储在String中的东西,这不是我需要的东西 - 我只需要一个反斜杠。对我来说,这似乎是一个Swift怪,因为它在Objective-C中运行得很好。

let str = "\b" //Invalid escape sequence in literal
NSString *str = @"\b"; //works great

我需要生成此字符串,因为"\b"是检测用户在使用UIKeyCommand时何时按下“删除”的唯一方法:

let command = UIKeyCommand(input: "\b", modifierFlags: nil, action: "didHitDelete:")

如何解决此问题?

编辑:真的不想生成仅"\b"的字符串,这不起作用 - 它保持原始值:

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

2 个答案:

答案 0 :(得分:9)

Swift相当于\b\u{8}。它映射到ASCII控制代码8,就像目标C中的\b一样。我已经对此进行了测试,发现它可以在this earlier answer of mine中与UIKeyCommand一起使用。

示例摘录:

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

答案 1 :(得分:4)

我不相信它得到支持。

基于Swift文档https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/StringsAndCharacters.html

  

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

     

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

     

任意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“存在”时,它被“忽略”。