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

标签 swift string char

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

例如

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)

谁能看出我哪里出错了?

最佳答案

基于这篇文章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) }

关于swift - 尝试使用 Swift 获取 String 中单个字符的 ASCII 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46637075/

相关文章:

ios - 如何让 SwiftUI 全屏显示?

swift - 我无法让我的代码使用过时的 Swift Core Data 教程

c - 在 C 中为字符串数组实现快速排序 - 为什么我会收到 SIGABRT 错误?

c++ - 为什么下面的代码中a和b共享相同的地址?

ios - UIScrollView 不工作/宽度和高度错误

swift - 如何以编程方式将自定义 NSToolbarItem 添加到现有工具栏

Java回文程序无法运行

java - 如何在 Java 中比较字符串?

c - C语言中用一个字符替换字符串中的多个字符

c - 在两者之间跳过一些 scanf