[英]Converting to Char/String from Ascii Int in Swift
我正在尝试将ascii字符的整数表示形式转换回字符串。
string += (char) int;
在像Java这样的其他语言(这里的例子)中,我可以将整数转换为char。 Swift显然不知道这些,我猜测使用所有强大的NSString以某种方式将能够做到这一点。
它可能不像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
如果你只需要来自A ...的字符串字符,你可以使用这个函数:
func characterFromInt(index : Int) -> String {
let startingValue = Int(("A" as UnicodeScalar).value)
var characterString = ""
characterString.append(Character(UnicodeScalar(startingValue + index)))
return characterString
}
这是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
变成"("
,那么这应该适合你:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.