2016-08-18 156 views
0

的CharacterView和UnicodeScalarView之间的不同下面的两个代码几乎做了同样的事情什么是String类型

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

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

然而,当我检查背后的意义更详细的信息,我发现了差异。 characters属性是CharacterView的类型,而unicodeScalarsUnicodeScalarView的类型。

问题

什么是它们之间的区别?

哪种属性首选什么情况? (会是不错的一个例子)

非常感谢

+2

https://developer.apple.com/swift/blog/?id=30是一个很好的概述。 - 用'“”'试试! –

+0

@MartinR谢谢 – SLN

回答

1

这可以归结为一种CharacterUnicodeScalar之间的差异。

Unicode的标量

在幕后,斯威夫特的本地字符串类型从Unicode标值构建。 Unicode标量是字符或修饰符的唯一21位数字,例如LATIN SMALL LETTER A(“a”)的U + 0061或FRONT-FACING BABY CHICK(“”)的U + 1F425。

...

扩展字形集群

斯威夫特的性格类型的每个实例代表单个扩展字形集群。扩展的字形集群是一个或多个Unicode标量的序列,它们(当组合时)产生单个可读字符。

下面是一个例子。字母é可以表示为单个Unicode标量é(拉丁文小写字母E WITH ACUTE,或U + 00E9)。然而,相同的字母也可以表示为一对标量 - 标准字母e(拉丁小字母E或U + 0065),然后是组合急性尖端标量(U + 0301)。将ACUTE ACCENT标量组合标量以图形方式应用于其之前的标量,当它通过支持Unicode的文本呈现系统呈现时,将e变为é。

来自Swift Programming Language GuideStrings and Characters部分。

在大多数情况下,我可以想到你会想要处理Character实例,因为它们是人类语言的最小单元。我无法想象在不考虑完整扩展字形集群的情况下,您想要在修改器上进行操作的情况。

+0

嗨亚历克斯,谢谢你的帮助 – SLN