2014-09-12 14 views
8

मैं एक एसीसी चरित्र के पूर्णांक प्रस्तुति को एक स्ट्रिंग में परिवर्तित करने की कोशिश कर रहा हूं।स्विफ्ट में असीसी इंट से चार/स्ट्रिंग में कनवर्ट करना

string += (char) int; 

जावा जैसी अन्य भाषाओं में (यहां उदाहरण) मैं केवल एक char में पूर्णांक डाल सकता हूं। स्विफ्ट स्पष्ट रूप से इन्हें नहीं जानता है और मैं अनुमान लगा रहा हूं कि सभी शक्तिशाली एनएसएसटींग किसी भी तरह से चाल करने में सक्षम होंगे।

उत्तर

20

यह जावा के रूप में के रूप में साफ नहीं हो सकता है, लेकिन आप इसे इस तरह से कर सकते हैं:

var string = "" 
string.append(Character(UnicodeScalar(50))) 

तुम भी अधिक मिलते-जुलते रूप वाक्य रचना संशोधित कर सकते हैं यदि आप चाहें:

//extend Character so it can created from an int literal 
extension Character: IntegerLiteralConvertible { 
    public static func convertFromIntegerLiteral(value: IntegerLiteralType) -> Character { 
     return Character(UnicodeScalar(value)) 
    } 
} 

//append a character to string with += operator 
func += (inout left: String, right: Character) { 
    left.append(right) 
} 

var string = "" 
string += (50 as Character) 

या dasblinkenlight की विधि का उपयोग:

func += (inout left: String, right: Int) { 
    left += "\(UnicodeScalar(right))" 
} 
var string = "" 
string += 50 
+6

उन्होंने यह भी 's + = इस्तेमाल कर सकते हैं" \ (UnicodeScalar (x)) "' – dasblinkenlight

+0

एक अच्छा बात है कि। और इसे साफ़ करने के लिए, आप ऑपरेटर + = 'func + = (इनआउट बाएं: स्ट्रिंग, दाएं: Int) {left + =" \ (यूनिकोडस्कालर (दाएं)) " }' – connor

+0

प्राप्त करने का कोई तरीका है तेजी से चरित्र से दशमलव मूल्य –

2

आप एक से केवल स्ट्रिंग वर्ण चाहते हैं ... आप इस समारोह का उपयोग कर सकते हैं:

func characterFromInt(index : Int) -> String { 
     let startingValue = Int(("A" as UnicodeScalar).value) 
     var characterString = "" 
     characterString.append(Character(UnicodeScalar(startingValue + index))) 
     return characterString 
    } 
1

यहाँ में एक उत्पादन के लिए तैयार समाधान है स्विफ्ट 3:

extension String { 
    init(unicodeScalar: UnicodeScalar) { 
     self.init(Character(unicodeScalar)) 
    } 


    init?(unicodeCodepoint: Int) { 
     if let unicodeScalar = UnicodeScalar(unicodeCodepoint) { 
      self.init(unicodeScalar: unicodeScalar) 
     } else { 
      return nil 
     } 
    } 


    static func +(lhs: String, rhs: Int) -> String { 
     return lhs + String(unicodeCodepoint: rhs)! 
    } 


    static func +=(lhs: inout String, rhs: Int) { 
     lhs = lhs + rhs 
    } 
} 

उपयोग:

let a = String(unicodeCodepoint: 42) // "*" 
var b = a + 126 // "*~" 
b += 33 // "*~!" 

ध्यान दें कि यह सब ASCII और यूनिकोड कोड पॉइंट्स के साथ काम करता है, तो आप यह कर सकते हैं:

var emoji = String(unicodeCodepoint: 0x1F469)! // "" 
emoji += 0x200D // "‍" 
emoji += 0x1F4BB // "‍" 

एक निजी नोट के रूप में, मैं अपने कोड में इसके उपयोग नहीं होता। मैं ":" + 40":40" बनने की उम्मीद करता, ":(" नहीं। जहां 40"(" हो जाता है आप एक दूसरे को पसंद करते हैं, तो यह आपके लिए अच्छी तरह से काम करना चाहिए :)

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