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)



©️2020 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值