爲什麼這兩行會給我不同的結果?Swift string count()vs NSString .length不等於
var str = "Hello " // the square is an emoji
count(str) // returns 7
(str as NSString).length // returns 8
原件以供參考:
爲什麼這兩行會給我不同的結果?Swift string count()vs NSString .length不等於
var str = "Hello " // the square is an emoji
count(str) // returns 7
(str as NSString).length // returns 8
原件以供參考:
這是因爲Swift使用Extended Grapheme Clusters。 Swift將笑臉視爲一個字符,但NSString方法將其視爲兩個Unicode字符,儘管它們是「組合」並表示單個符號。
我認爲最好的documentation說它:
字符數由計數返回(_ :)函數並不總是與包含相同字符的NSString的length屬性相同。 NSString的長度基於字符串的UTF-16表示中16位代碼單元的數量,而不是字符串中Unicode擴展字形羣集的數量。爲了反映這一事實,NSString的length屬性在Swift String值上訪問時稱爲utf16Count。
在Swift 1.2中'utf16Count'不再存在,它現在是'count(str.utf16)'。 –