2014-12-08 9 views
5

मुझे "\b" एक स्ट्रिंग बनाने में सक्षम होना चाहिए। लेकिन जब मैं कोशिश करता हूं, एक्सकोड संकलन-समय त्रुटि फेंकता है: शाब्दिक में अमान्य भागने अनुक्रम। मुझे समझ में नहीं आता क्यों, "\r" बस ठीक काम करता है। अगर मैं "\\b" डालता हूं तो वास्तव में स्ट्रिंग में संग्रहीत किया जाता है, जो मुझे चाहिए - मुझे केवल एक बैकस्लैश की आवश्यकता है। मेरे लिए, यह एक स्विफ्ट विषमता प्रतीत होता है क्योंकि यह उद्देश्य-सी में ठीक काम करता है।शाब्दिक में अमान्य भागने अनुक्रम: " b"

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

मैं जब UIKeyCommand का उपयोग कर इस स्ट्रिंग उत्पन्न करने के लिए क्योंकि "\b" जब उपयोगकर्ता दबाया 'हटाएँ' पता लगाने के लिए एक ही रास्ता है की जरूरत है:

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

मैं इस समस्या के समाधान कैसे काम कर सकते हैं?

संपादित करें: यह वास्तव में, यह काम नहीं करता एक स्ट्रिंग है कि केवल "\b" है उत्पन्न करने के लिए नहीं चाहता है - यह मूल मूल्य रहता है:

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

संयोग से, अपने स्ट्रिंग प्रतिस्थापन स्विफ्ट में क्योंकि काम नहीं करता है, "\ rb" एक गाड़ी वापसी चरित्र पत्र "बी" (शाब्दिक बाइट्स 0D 98) द्वारा पीछा किया है। उस स्ट्रिंग में प्रतिस्थापित करने के लिए "आर" नहीं है ... –

उत्तर

8

स्विफ्ट समकक्ष \b\u{8} है। यह उद्देश्य सी में \b की तरह ASCII नियंत्रण कोड 8 पर नक्शा करता है, मैंने इसका परीक्षण किया है और इसे 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

\ ख के लिए 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

अजीब! 'UIKeyCommand' का उपयोग करते समय उपयोगकर्ता द्वारा दबाए गए उपयोगकर्ता को हटाए जाने का एकमात्र तरीका' \ b' है। :/ – Joey

+0

तो इस समय पर यह असंभव है, इसे हल करने का कोई तरीका नहीं है? – Joey

+0

क्षमा करें दोस्त यह इस तरह दिख रहा है। बैकस्पेस के साथ आप क्या करने की कोशिश कर रहे हैं? शायद छिपी हुई यूआईटीएक्स्टफिल्ड्स और http://stackoverflow.com/questions/1977934/detect-backspace-in-uitextfield/6637821#6637821 जैसे कुछ का उपयोग करके इसे पकड़ने का एक और तरीका है। या आप हमेशा कोशिश कर सकते हैं और यह पता लगा सकते हैं कि इस तरह कुछ करने का मूल्य क्या है: https://gist.github.com/steventroughtonsmith/7515380। आप बैकस्पेस दबाकर क्या लौटा सकते हैं देख सकते हैं। –

संबंधित मुद्दे