Converting to Char/String from Ascii Int in Swift

后端 未结 3 1351
萌比男神i
萌比男神i 2021-01-17 17:22

I\'m trying to convert the integer representation of an ascii character back into a string.

string += (char) int;

In other languages like J

相关标签:
3条回答
  • 2021-01-17 17:45

    If you want only String characters from A... you can use this func:

    func characterFromInt(index : Int) -> String {
            let startingValue = Int(("A" as UnicodeScalar).value)
            var characterString = ""
            characterString.append(Character(UnicodeScalar(startingValue + index)))
            return characterString
        }
    
    0 讨论(0)
  • 2021-01-17 17:56

    It may not be as clean as Java, but you can do it like this:

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

    You can also modify the syntax to look more similar if you like:

    //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)
    

    Or using dasblinkenlight's method:

    func += (inout left: String, right: Int) {
        left += "\(UnicodeScalar(right))"
    }
    var string = ""
    string += 50
    
    0 讨论(0)
  • 2021-01-17 17:57

    Here's a production-ready solution in Swift 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
        }
    }
    

    Usage:

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

    Note that this works with all ASCII and Unicode codepoints, so you can do this:

    var emoji = String(unicodeCodepoint: 0x1F469)! // "                                                                    
    0 讨论(0)
提交回复
热议问题