NSString的长度属性

时间:2017-09-19 19:48:13

标签: swift

count属性返回的字符数不总是与包含相同字符的NSString的length属性相同。 NSString的长度基于字符串的UTF-16表示中的16位代码单元的数量,而不是字符串中Unicode扩展的字形集群的数量。 有人可以用简单的例子来解释它吗?

1 个答案:

答案 0 :(得分:0)

创建NSString时,大多数Unicode字符只能由一个UTF-16代码单元表示(嗯,UCS-2,但足够接近),因此可以合理地假设UTF-16长度与字符串长度相同。因为毕竟,我们怎么能需要超过65,536个字符呢?是的,世界上有很多语言,但65,536仍然非常多,而且...

喔。垃圾。

无论如何,在2017年,您的应用很可能会遇到可能需要多个UTF-16代码单元的字符,因此不能假设字符串的长度与其UTF-16的长度相同缓冲液:

import Foundation

let poo = ""

print("count: \(poo.count)")
print("NSString length: \((poo as NSString).length)")

输出:

count: 1
NSString length: 2