繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM