我需要能够创建一个"\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)
答案 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)
我不相信它得到支持。
字符串文字可以包含以下特殊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“存在”时,它被“忽略”。