3 回答
TA贡献1831条经验 获得超9个赞
对于Swift 2.0和3.0,请使用test1.characters.count
。但是,你应该知道一些事情。所以,请继续阅读。
在Swift中计算字符数
在Swift 2.0之前,它count
是一个全局函数。从Swift 2.0开始,它可以被称为成员函数。
test1.characters.count
它将返回a中的实际Unicode字符数String
,因此它是最正确的替代方法,如果您打印字符串并手动计算字符,您将得到相同的结果。
但是,由于Strings
在Swift中实现了这种方式,因此字符并不总是占用相同数量的内存,因此请注意,这与其他语言中的常用字符数方法完全不同。
例如,您也可以使用 test1.utf16.count
但是,如下文所述,返回值不保证是相同的调用count
上characters
。
从语言参考:
扩展的字形集群可以由一个或多个Unicode标量组成。这意味着不同的字符和相同字符的不同表示可能需要不同的内存量来存储。因此,Swift中的字符不会在字符串表示中占用相同数量的内存。因此,如果不迭代字符串以确定其扩展的字形集群边界,则无法计算字符串中的字符数。如果使用特别长的字符串值,请注意characters属性必须遍历整个字符串中的Unicode标量,以确定该字符串的字符。
characters属性返回的字符数不总是与包含相同字符的NSString的length属性相同。NSString的长度基于字符串的UTF-16表示中的16位代码单元的数量,而不是字符串中Unicode扩展的字形集群的数量。
完美地说明上述情况的一个例子是检查包含单个表情符号字符的字符串的长度,如注释中的n00neimp0rtant所指出的。
var emoji = "?"
emoji.characters.count //returns 1
emoji.utf16.count //returns 2
添加回答
举报