【问题标题】:What's the different between CharacterView and UnicodeScalarView of the String typeString类型的CharacterView和UnicodeScalarView有什么区别
【发布时间】:2016-08-18 14:26:00
【问题描述】:

以下两个代码实际上做了同样的事情

for character in "Dog!????".characters {
    print(character)
}

for character in "Dog!????".unicodeScalars {
    print(character)
}

但是,当我检查感官背后的更多详细信息时,我发现了不同之处。 characters 属性是 CharacterView 的类型,而 unicodeScalarsUnicodeScalarView 的类型。

问题

它们之间有什么区别?

在什么情况下首选哪个属性? (最好有一个例子)

非常感谢

【问题讨论】:

标签: swift string unicode


【解决方案1】:

这归结为CharacterUnicodeScalar 之间的区别。

Unicode 标量

在幕后,Swift 的原生 String 类型是由 Unicode 标量值构建的。 Unicode 标量是字符或修饰符的唯一 21 位数字,例如 U+0061 表示拉丁小写字母 A(“a”),或 U+1F425 表示正面小鸡(“?”)。

...

扩展字素簇

Swift 的 Character 类型的每个实例都代表一个扩展的字素簇。扩展字素簇是一个或多个 Unicode 标量的序列,这些标量(组合时)产生单个人类可读字符。

这是一个例子。字母 é 可以表示为单个 Unicode 标量 é(带有 ACUTE 的拉丁小写字母 E,或 U+00E9)。但是,同一个字母也可以表示为一对标量——一个标准字母 e(拉丁小写字母 E,或 U+0065),后跟 COMBINING ACUTE ACCENT 标量 (U+0301)。 COMBINING ACUTE ACCENT 标量以图形方式应用于它之前的标量,当它由支持 Unicode 的文本呈现系统呈现时,将 e 转换为 é。

来自Swift Programming Language GuideStrings and Characters 部分。

在大多数情况下,我认为您会希望处理 Character 实例,因为它们是人类语言的最小单位。我无法想象在不考虑完整扩展字素簇的情况下您想要对修饰符进行操作的情况。

【讨论】:

    猜你喜欢
    • 2021-12-21
    • 2019-06-11
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 2016-11-09
    • 2016-03-26
    相关资源
    最近更新 更多