为什么这两行会给我不同的结果?
var str = "Hello " // the square is an emoji
count(str) // returns 7
(str as NSString).length // returns 8
原文供参考:
答案 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字符,尽管它们是“组合”并代表单个符号。