我正在尝试将ascii字符的整数表示形式转换回字符串。
string += (char) int;
在Java等其他语言(此处的示例)中,我可以将整数转换为char。 Swift显然不知道这些,我猜测使用所有强大的NSString以某种方式将能够做到这一点。
答案 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
成为"("
的第二个,那么这应该适合您:)