尝试使用Swift获取String中的单个字符的ASCII值

时间:2017-10-08 23:33:02

标签: swift string char

我试图弄清楚如何获取String对象中包含的字符的数值。

e.g。

let checkString = "ball"
for i in checkString.characters {
    var val = Int(String(i))!
    print(val)
}

我希望我的输出为:

ASCII value of 'b'
ASCII value of 'a'
ASCII value of 'l'
ASCII value of 'l'

然而,我得到错误:

fatal error: unexpectedly found nil while unwrapping an Optional value

在Java中,等效代码为:

int val = str.charAt(i)

任何人都可以看到它出错了吗?

1 个答案:

答案 0 :(得分:0)

根据这篇文章What's the simplest way to convert from a single character String to an ASCII value in Swift?,你可以试试这个:

extension String {
    var asciiArray: [UInt32] {
        return unicodeScalars.filter{$0.isASCII}.map{$0.value}
    }
}

extension Character {
    var asciiValue: UInt32? {
        return     String(self).unicodeScalars.filter{$0.isASCII}.first?.value
    }
}

"ball".lowercased().asciiArray.forEach { print($0 - 96) }

请注意,这仅适用于降低的大小写字符串,因为计算是基于ASCII的,因此97等于“a”,98“b”等等。如果你想让它适应大写字符串,你需要使用这一行:

"UPpER".uppercased().asciiArray.forEach { print($0 - 64) }