如何计算字符串的长度?例如,我有一个定义如下的变量:
var test1: String = "Scott"
然而,我似乎找不到字符串的长度方法。
如何计算字符串的长度?例如,我有一个定义如下的变量:
var test1: String = "Scott"
然而,我似乎找不到字符串的长度方法。
当前回答
在Swift 2.0中,计数不再有效。您可以改用此选项:
var testString = "Scott"
var length = testString.characters.count
其他回答
在swift4中,我一直使用string.count,直到今天我发现
string.endIndex.encodedOffset
是更好的替代方法,因为它更快-对于50000个字符,字符串大约比.count快6倍。.count取决于字符串长度,但.endIndex.encodedOffset不一样。
但有一个“不”。它对带有表情符号的字符串不好,它会给出错误的结果,所以只有count是正确的。
tl;dr如果您希望字符串类型的长度以人类可读字符的数量表示,请使用countElements()。如果您想知道扩展字形簇数量的长度,请使用endIndex。请继续阅读以了解详细信息。
String类型被实现为Unicode字符的有序集合(即序列),并且它符合CollectionType协议,后者符合_CollectionType协议,这是countElement()期望的输入类型。因此,可以调用countElements(),传递String类型,并返回字符数。
然而,为了符合CollectionType,后者又符合_CollectionType,String还实现了startIndex和endIndex计算的财产,它们实际上分别表示索引在第一个字符簇之前的位置和索引在最后一个字符簇之后的位置。因此,在字符串“ABC”中,索引在A之前的位置是0,在C之后的位置是3。因此,endIndex=3,这也是字符串的长度。
所以,endIndex可以用来获取任何字符串类型的长度,对吗?
嗯,不总是。。。Unicode字符实际上是扩展的字素簇,它是一个或多个Unicode标量的序列,组合起来创建一个人类可读的字符。
let circledStar: Character = "\u{2606}\u{20DD}" // ☆⃝
circledStar是一个由U+2606(一个白色的星)和U+20DD(一个组合的包围圈)组成的单个字符。让我们从circledStar创建一个字符串,并比较countElements()和endIndex的结果。
let circledStarString = "\(circledStar)"
countElements(circledStarString) // 1
circledStarString.endIndex // 2
为Xcode 6 beta 4更新,更改方法utf16count-->utf16count
var test1: String = "Scott"
var length = test1.utf16Count
Or
var test1: String = "Scott"
var length = test1.lengthOfBytesUsingEncoding(NSUTF16StringEncoding)
这里有一些比使用全局函数更短、更自然的方法:
aString.utf16count
我不知道它是否在beta 1中可用。但它肯定在beta 2中。
在Swift 4.1和Xcode 9.4.1中
在Objective c和Swift中获取长度是不同的。在Obj-c中我们使用长度属性,但在Swift中我们使用计数属性
例子:
//In Swift
let stringLenght = "This is my String"
print(stringLenght.count)
//In Objective c
NSString * stringLenght = @"This is my String";
NSLog(@"%lu", stringLenght.length);