2014-12-08 31 views
5

我需要能夠創建一個字符串是"\b"。但是當我嘗試時,Xcode會引發編譯時錯誤:文字中的無效轉義序列。我不明白爲什麼,"\r"工作得很好。如果我把"\\b"那麼這就是實際存儲在字符串中,這不是我所需要的 - 我只需要一個反斜槓。對我來說,這似乎是一個Swift的怪胎,因爲它在Objective-C中工作得很好。無效轉義序列:「 B」

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

我需要生成這個字符串,因爲"\b"是當用戶按下「刪除」來檢測的唯一方法使用UIKeyCommand時:

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

我怎樣才能解決這個問題?

編輯:真的不希望產生一個String,只有"\b",這並不工作 - 它停留在原始值:

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

順便提及,您的字符串替換不因爲在工作斯威夫特,「\ RB」是一個回車符接着字母「b」(字面意思的字節0D 98)。該字符串沒有「r」來代替... – 2014-12-22 20:57:56

回答

8

\b的夫特當量\u{8}。它映射到ASCII控制碼8,就像在目標C \b我測試過這一點,並發現它很好地工作UIKeyCommand,在this earlier answer of mine

例片段:

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

我不相信它是支持的。

基於雨燕文檔https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/StringsAndCharacters.html上:

String literals can include the following special Unicode characters:

The escaped special characters \0 (null character), \ (backslash), \t (horizontal tab), \n (line feed), \r (carriage return), \" (double quote) and \' (single quote)

An arbitrary Unicode scalar, written as \u{n}, where n is between one and eight hexadecimal digits

爲\ 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「存在」,它被「忽略」。

+0

奇怪! '\ b'是使用'UIKeyCommand'時可以知道用戶按下刪除的唯一方式。 :/ – Joey 2014-12-08 05:52:58

+0

所以在這個時候這是不可能的,有沒有辦法解決它呢? – Joey 2014-12-08 18:08:29

+0

對不起,他有點像這樣。你想用退格做什麼?或許有通過使用隱藏UITextFields和類似http://stackoverflow.com/questions/1977934/detect-backspace-in-uitextfield/6637821#6637821僞造它的另一種方式。或者你總是可以嘗試通過嘗試這樣的方法來弄清楚什麼是價值:https://gist.github.com/steventroughtonsmith/7515380。您可以看到按退格鍵返回的內容。 – 2014-12-09 06:37:21

相關問題