Swift字符串count()vs NSString .length不相等

时间:2015-04-23 19:45:38

标签: string swift nsstring

为什么这两行会给我不同的结果?

var str = "Hello " // the square is an emoji

count(str) // returns 7

(str as NSString).length // returns 8

原文供参考:

enter image description here

2 个答案:

答案 0 :(得分:7)

我认为documentation说得最好:

  

count(_ :)函数返回的字符数并不总是与包含相同字符的NSString的length属性相同。 NSString的长度基于字符串的UTF-16表示中的16位代码单元的数量,而不是字符串中Unicode扩展的字形集群的数量。为了反映这一事实,当在Swift String值上访问NSString时,length属性称为utf16Count。

答案 1 :(得分:7)

这是因为Swift使用Extended Grapheme Clusters。 Swift将笑脸视为一个字符,但NSString方法将其视为两个Unicode字符,尽管它们是“组合”并代表单个符号。