我只想在Swift中获取单个字符字符串的ASCII值。这是我目前正在做的事情:
var singleChar = "a" println(singleChar.unicodeScalars[singleChar.unicodeScalars.startIndex].value) //prints: 97
这太丑了。必须有一个更简单的方法。
编辑/更新Swift 5.2或更高版本
extension StringProtocol { var asciiValues: [UInt8] { compactMap(\.asciiValue) } }
"abc".asciiValues // [97, 98, 99]
在Swift 5中,您可以使用新的字符属性isASCII和asciiValue
Character("a").isASCII // true Character("a").asciiValue // 97 Character("á").isASCII // false Character("á").asciiValue // nil
旧答案
您可以创建一个扩展:
Swift 4.2或更高版本
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