以编程方式向表情符号添加肤色修饰符 [英] Add skin tone modifier to an emoji programmatically

查看:0
本文介绍了以编程方式向表情符号添加肤色修饰符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用程序中向表情符号添加肤色修饰符时遇到了一些问题。例如,如果我使用:

let text = "👍" + "🏻" 

它打印👍🏻

然而,对于其他表情符号,它不起作用。例如:

let text = "👩‍🦰" + "🏻"

打印👩‍🦰🏻

向表情符号添加肤色修饰符的正确方式是什么?

推荐答案

仅当前面的字符是纯Emoji字符时,添加肤色修饰符才有效。原来,您的"👩‍🦰"实际上是由3个字符组成的。相貌平平的女性表情符号U+1F469(👩),然后是U+200D,最后是修发剂U+1F9B0(🦰)。

您可以通过以下命令查看:

print(Array("👩‍🦰".unicodeScalars)) // ["u{0001F469}", "u{200D}", "u{0001F9B0}"]

因此,尝试在头发修改剂之后添加肤色修改剂并不起作用。肤色修饰符需要紧跟在基本表情符号之后。

这是一个字符串扩展,它将对字符应用皮肤色调,即使它们已经有了皮肤色调或其他修饰符。

extension String {
    func applySkinTone(_ tone: String) -> String {
        guard tone.count == 1 && self.count > 0 else { return self }
        let minTone = Unicode.Scalar(0x1F3FB)!
        let maxTone = Unicode.Scalar(0x1F3FF)!
        guard let toneChar = tone.unicodeScalars.first, minTone...maxTone ~= toneChar else { return self }

        var scalars = Array(self.unicodeScalars)
        // Remove any existing tone
        if scalars.count >= 2 && minTone...maxTone ~= scalars[1] {
            scalars.remove(at: 1)
        }
        // Now add the new tone
        scalars.insert(toneChar, at: 1)

        return String(String.UnicodeScalarView(scalars))
    }
}

print("👍".applySkinTone("🏻")) // 👍🏻
print("👩‍🦰".applySkinTone("🏾")) // 👩🏾‍🦰

请注意,此代码不会验证原始字符串是否支持皮肤色调。

这篇关于以编程方式向表情符号添加肤色修饰符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆