一尘不染

在Swift中从单个字符串转换为ASCII值的最简单方法是什么?What's the simplest way to convert from a single character String to an ASCIIvalue in Swift?

swift

我只想在Swift中获取单个字符字符串的ASCII值。这是
我目前正在做的事情:

var singleChar = "a"
println(singleChar.unicodeScalars[singleChar.unicodeScalars.startIndex].value) //prints: 97

这太丑了。必须有一个更简单的方法。


阅读 289

收藏
2020-07-07

共1个答案

一尘不染

*编辑/更新Swift 5.2或更高版本

extension StringProtocol {
    var asciiValues: [UInt8] { compactMap(\.asciiValue) }
}

"abc".asciiValues  // [97, 98, 99]

在Swift 5中,您可以使用新的字符属性
isASCII
and
asciiValue

Character("a").isASCII       // true
Character("a").asciiValue    // 97

Character("á").isASCII       // false
Character("á").asciiValue    // nil

旧答案

您可以创建一个扩展:

Swift 4.2 or later

extension Character {
    var isAscii: Bool {
        return unicodeScalars.allSatisfy { $0.isASCII }
    }
    var ascii: UInt32? {
        return isAscii ? unicodeScalars.first?.value : nil
    }
}

extension StringProtocol {
    var asciiValues: [UInt32] {
        return compactMap { $0.ascii }
    }
}

Character("a").isAscii  // true
Character("a").ascii    // 97

Character("á").isAscii  // false
Character("á").ascii    // nil

"abc".asciiValues            // [97, 98, 99]
"abc".asciiValues[0]         // 97
"abc".asciiValues[1]         // 98
"abc".asciiValues[2]         // 99
2020-07-07