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

Ale*_*lex 10 string nsstring swift

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

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

count(str) // returns 7

(str as NSString).length // returns 8
Run Code Online (Sandbox Code Playgroud)

原件供参考:

在此输入图像描述

Mic*_*lum 7

我认为文档说得最好:

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

  • 在Swift 1.2中,'utf16Count`不再存在,现在是`count(str.utf16)`. (3认同)
  • 小调整:现在是“str.utf16.count” (2认同)

Ato*_*mix 7

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