Swift.String和Unicode

如果您对Swift字符串及其unicode表示之间的关系感到困惑,那么本文适合您。

在C,C ++,JavaScript中,您可以轻松获取给定字母的整数代码,并像处理整数数组一样使用字符串。 在某些算法中以这种方式表示字符串可能很有用,但我无法弄清楚如何在Swift中进行操作。 我期待这样的事情:

 让helloString =“ Hello” 
let eCode = helloString .codePoint(at: 1 )// 预期的String方法
print(“'e'=”,eCode)//'e'= 101

但最终我完成了这一步:

每个都有其对应的整数值。 这些字符称为Unicode标量:整数代码与字符或字符的一部分之间存在一对一的关系。

如果它是所有Unicode标准定义的,我都不会写这篇文章。 还有一些规则列表,说明如何处理Unicode标量以获取表中未包含的字符。 是的,人们产生的字符远远超过了表格中的字符:

“计算机科学中的所有问题都可以通过另一种间接解决方案来解决” David Wheeler

Swift字符串完全支持Unicode。 这意味着字符串“Flag-🇺🇸”的长度(计数)为6个字符。 如果您尝试获取其他语言的字符数,则非常方便-当您看到6个字符且长度为9个字符时!

因此,Swift.String类型封装了Unicode标准的所有复杂性(可以随意打开并阅读)。 很好,但是如何获得令人垂涎的字符串字符的整数值? 让我们考虑一下String类型周围不同类型之间的关系:

在上面的清单和本文标题中的方案中,我们看到了Swift工程师开发的类型,这些类型可以将人类可读的String连接为字符数组及其在编码时的整数表示形式。 熟悉它们的最好方法是阅读Swift.String官方文档

最初对我来说,使用Swift.String类型带来的不便,现在我认为这是从字符串以不同编码表示的字母数组中抽象出字符串的一种正确方法。

  1. 字符串是字符序列
  2. 每个字符都可以使用一个或多个Unicode标量进行编码
  3. 每个Unicode标量最多需要21位,但是开发了UTF-8和UTF-16编码以较短的整数类型表示这21位
  4. Swift.String和Swift.Character具有’unicodeScalars’属性,以获取Unicode标量序列
  5. 使用具有此UnicodeScalarView类型的Array初始值设定项,我们可以获得一个UInt32整数数组,该数组编码给定的字符串