在Swift中,我如何计算UITextField中的字符数量?
在Swift中,我如何计算UITextField中的字符数量?
如何获取 String
的长度?例如,我定义了一个变量:
var test1: String = "Scott"
然而,我似乎找不到字符串的长度方法。
简述:
对于Swift 2.0和3.0,使用test1.characters.count
。但是,你需要了解一些事情,所以请继续阅读。
计算Swift中的字符数
在Swift 2.0之前,count
是一个全局函数,但在Swift 2.0之后,它可以作为成员函数调用。
test1.characters.count
它将返回String
中实际的Unicode字符数,因此它在某种意义上是最正确的替代方法,因为如果你打印字符串并手动计算字符数,你将得到相同的结果。
然而,由于在Swift中实现Strings
的方式,字符并不总是占用相同数量的内存,所以要注意此方法与其他语言中通常的字符计数方法相当不同。
例如,你也可以使用test1.utf16.count
但是,如下所述,返回的值不能保证与在characters
上调用count
得到的值相同。
来自语言参考:
扩展字形集可以由一个或多个Unicode标量组成。这意味着不同的字符 - 以及相同字符的不同表示方式 - 可能需要不同数量的内存来存储。因此,在Swift中,字符串的字符并不都占用同样数量的空间。结果,不能通过简单遍历字符串来计算字符串的字符数。如果你在处理特别长的字符串值,请注意,
characters
属性必须遍历整个字符串中的Unicode标量,以确定该字符串的字符。
characters
属性返回的字符数不总是与包含相同字符的NSString的长度属性相同。NSString的长度基于字符串的UTF-16表示中的16位代码单元数,而不是字符串中Unicode扩展字形群集数。
正如n00neimp0rtant在评论中指出的,一个完美地诠释了上述情况的例子是检查包含单个emoji字符的字符串的长度。
var emoji = "" emoji.characters.count //returns 1 emoji.utf16.count //returns 2
自Swift 4+起
就是:
test1.count
由于某些原因。
(感谢Martin R)
自Swift 2起:
Swift 2中,Apple将全局函数更改为协议扩展,这些扩展与符合协议的任何类型匹配。因此,新语法为:
test1.characters.count
(感谢JohnDifool的提醒)
自Swift 1起
使用count characters方法:
let unusualMenagerie = "Koala 🐨, Snail 🐌, Penguin 🐧, Dromedary 🐪" println("unusualMenagerie has \(count(unusualMenagerie)) characters") // prints "unusualMenagerie has 40 characters"
来自苹果Swift指南
(请注意,对于早于1.2版本的Swift,这将替换为countElements(unusualMenagerie)
)
相应变量,这将为
length = count(test1) // was countElements in earlier versions of Swift
或者您可以使用test1.utf16count