我试图弄清楚如何获取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)
任何人都可以看到它出错了吗?
答案 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) }