轉(zhuǎn)發(fā)請(qǐng)注明來源: https://z.clouderwork.com/article/70c539ccb2b66565
引:新的功能模塊由Swift3開發(fā)缚俏,開發(fā)階段由于沒有測(cè)試emoji表情,前幾天發(fā)現(xiàn)這個(gè)bug摹量,當(dāng)發(fā)出的文本中帶有emoji表情的時(shí)候臣疑,顯示會(huì)出現(xiàn)問題盔憨,如圖1:
其實(shí)展現(xiàn)的時(shí)候,應(yīng)該是這樣的讯沈,如圖2:
圖1:
圖2:
根據(jù)上面出現(xiàn)的問題郁岩,開始尋找答案,從編碼這個(gè)思路找答案缺狠,會(huì)發(fā)現(xiàn)可以部分解決問題问慎,但是不能完全解決問題。后來從Swift的字符串長(zhǎng)度計(jì)算得到答案挤茄,在Swift中字符串的長(zhǎng)度是用String.characters.count得出的如叼,當(dāng)中間有表情的時(shí)候,則會(huì)計(jì)算錯(cuò)誤穷劈。
下面給出測(cè)試?yán)樱?/p>
由此我們可以看出當(dāng)有emoji的時(shí)候笼恰,計(jì)算長(zhǎng)度是有誤差的踊沸,當(dāng)我們使用NSAttributedString的時(shí)候,會(huì)用到
addAttribute(String, value: Any, range: NSRange)函數(shù)社证,計(jì)算range的時(shí)候就會(huì)用到長(zhǎng)度計(jì)算逼龟,如果使用String.characters.count,則結(jié)果很顯然就是錯(cuò)誤的猴仑。