【发布时间】:2015-07-02 04:45:51
【问题描述】:
为什么这两行给我的结果不同?
var str = "Hello ????" // the square is an emoji
count(str) // returns 7
(str as NSString).length // returns 8
参考原文:
【问题讨论】:
为什么这两行给我的结果不同?
var str = "Hello ????" // the square is an emoji
count(str) // returns 7
(str as NSString).length // returns 8
参考原文:
【问题讨论】:
这是因为 Swift 使用扩展字素集群。 Swift 将笑脸视为一个字符,但 NSString 方法将其视为两个 Unicode 字符,尽管它们是“组合的”并代表一个符号。
【讨论】:
我认为documentation 说得最好:
count(_:) 函数返回的字符数并不总是与包含相同字符的 NSString 的长度属性相同。 NSString 的长度基于字符串的 UTF-16 表示中 16 位代码单元的数量,而不是字符串中 Unicode 扩展字形簇的数量。为了反映这一事实,NSString 的 length 属性在访问 Swift String 值时称为 utf16Count。
【讨论】:
utf16Count 在 Swift 1.2 中不再存在,现在是 count(str.utf16)。
str.utf16.count