从Swift中的Ascii Int转换为Char / String

时间:2014-09-12 01:31:20

标签: string swift integer ascii

我正在尝试将ascii字符的整数表示形式转换回字符串。

string += (char) int;

在Java等其他语言(此处的示例)中,我可以将整数转换为char。 Swift显然不知道这些,我猜测使用所有强大的NSString以某种方式将能够做到这一点。

3 个答案:

答案 0 :(得分:24)

它可能不像Java那么干净,但你可以这样做:

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

答案 1 :(得分:2)

如果你只想要来自A ...的字符串字符,你可以使用这个函数:

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

答案 2 :(得分:2)

这是 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
    }
}

用法:

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

请注意,这适用于所有ASCII Unicode代码点,因此您可以执行此操作:

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

作为个人注释,我不会在我的代码中使用它。我希望":" + 40成为":40",而不是":("。如果您更喜欢40成为"("的第二个,那么这应该适合您:)