3 回答

TA貢獻(xiàn)1831條經(jīng)驗 獲得超9個贊
對于Swift 2.0和3.0,請使用test1.characters.count
。但是,你應(yīng)該知道一些事情。所以,請繼續(xù)閱讀。
在Swift中計算字符數(shù)
在Swift 2.0之前,它count
是一個全局函數(shù)。從Swift 2.0開始,它可以被稱為成員函數(shù)。
test1.characters.count
它將返回a中的實際Unicode字符數(shù)String
,因此它是最正確的替代方法,如果您打印字符串并手動計算字符,您將得到相同的結(jié)果。
但是,由于Strings
在Swift中實現(xiàn)了這種方式,因此字符并不總是占用相同數(shù)量的內(nèi)存,因此請注意,這與其他語言中的常用字符數(shù)方法完全不同。
例如,您也可以使用 test1.utf16.count
但是,如下文所述,返回值不保證是相同的調(diào)用count
上characters
。
從語言參考:
擴(kuò)展的字形集群可以由一個或多個Unicode標(biāo)量組成。這意味著不同的字符和相同字符的不同表示可能需要不同的內(nèi)存量來存儲。因此,Swift中的字符不會在字符串表示中占用相同數(shù)量的內(nèi)存。因此,如果不迭代字符串以確定其擴(kuò)展的字形集群邊界,則無法計算字符串中的字符數(shù)。如果使用特別長的字符串值,請注意characters屬性必須遍歷整個字符串中的Unicode標(biāo)量,以確定該字符串的字符。
characters屬性返回的字符數(shù)不總是與包含相同字符的NSString的length屬性相同。NSString的長度基于字符串的UTF-16表示中的16位代碼單元的數(shù)量,而不是字符串中Unicode擴(kuò)展的字形集群的數(shù)量。
完美地說明上述情況的一個例子是檢查包含單個表情符號字符的字符串的長度,如注釋中的n00neimp0rtant所指出的。
var emoji = "?"
emoji.characters.count //returns 1
emoji.utf16.count //returns 2
添加回答
舉報