2014-12-08 7 views
5

"\b" olan bir String oluşturabilmem gerekiyor. Ama denediğimde, Xcode bir derleme zamanı hatası atar: Değişmezde geçersiz kaçış dizisi. Neden olduğunu anlamıyorum, "\r" sadece iyi çalışıyor. Eğer "\\b"'u koyarsam, bu aslında String'de saklanır, ihtiyacım olan şey değil - sadece bir ters eğik çizgiye ihtiyacım var. Bana göre bu bir Swift tuhaflığı gibi görünüyor çünkü Objective-C'de gayet iyi çalışıyor. UIKeyCommand kullanırkenGeçersiz olarak çıkış dizisi geçersiz: " b"

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

Ben "\b" kullanıcı 'delete' basıldığında algılamak için tek yol olduğu için bu dize oluşturmak gerekir:

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

Nasıl bu soruna geçici bir çözüm olabilir?

DÜZENLEME: Gerçekten, bu işe yaramazsa sadece "\b" bir dize oluşturmak istemiyor - orijinal değerini kalır:

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

arada, senin string değiştirme Swift çünkü çalışmıyor, "\ rb" harfi "b", (kelimenin tam anlamıyla bayt 0D 98) ve ardından bir satır başı karakteridir. Bu dizenin yerine "r" harfi yok ... –

cevap

8

\b'un Swift eşdeğeri \u{8}'dur. Hedef C'deki \b gibi ASCII kontrol kodu 8 ile eşleşir. Bunu test ettim ve UIKeyCommand ile this earlier answer of mine içinde iyi çalıştığı bulundu.

Örnek pasajı:

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

Ben desteklenmektedir inanmıyorum. Swift belgelerinde https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/StringsAndCharacters.html dayanarak

:

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 aşağıdakileri yaparsanız,

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 

Bu süre benziyor bu sonuçlar göreceksiniz 8'dir ASCII 8 "var", "yok sayılıyor".

+0

Garip! '' '' '' 'UIKeyCommand' kullanırken kullanıcı sildiğini bilmenin tek yoludur. :/ – Joey

+0

Yani bu noktada şu anda sadece imkansız bir şey, bunun bir çözümü yok mu? – Joey

+0

Üzgünüm ahbap, öyle görünüyor. Arka alanda ne yapmaya çalışıyorsun? Belki de gizli bir UITextFields ve http://stackoverflow.com/questions/1977934/detect-backspace-in-uitextfield/6637821#6637821 gibi bir şeyi kullanarak bunu başka bir şekilde taklit etme yolu vardır. Ya da her zaman böyle bir şey deneyerek değerin ne olduğunu anlamaya çalışın: https://gist.github.com/steventroughtonsmith/7515380. Geri tuşuna basıldığında neyin döndüğünü görebilirsiniz. –