1. 程式人生 > >Swift中字串中含有emoji表情時長度計算不準確的問題

Swift中字串中含有emoji表情時長度計算不準確的問題

最近工作中有一個顯示檔案路徑資訊需要標藍顯示,但是在路徑資訊中含有emoji時,發現部分路徑沒有標藍,效果如下:


因為Swift的String沒有length方法,所以獲取字串長度是用count,然而OC的NSString用的則是.length獲取長度,在有emoji的情況下,長度取的就不對,導致出現上圖路徑沒有標藍的情況。

附上蘋果的技術文件

NSString:


String:



Swift的關於計算長度的資料,裡面專門拿emoji出來做了一個例子.png 

我的理解是:NSString是由UTF-16單元構成,.length方法返回的是基於UTF-16的長度。Swift的count返回的只是Unicode字元個數,而Swift有專門的utf16.count是對應NSString的.length方法。而addAttribute裡面的Rang對應的應該就是UTF-16的長度,即標藍檔案獲取長度應該用下面的方法:

NSMakeRange(0, pathStr.utf16.count)