我在向应用程序中的表情符号添加肤色修改器时遇到一些问题。例如,如果我使用:
let text = "????" + "????"
打印出来了????????
但是,对于其他表情符号则不起作用。例如:
let text = "????????" + "????"
打印????????????
向表情符号添加肤色修改器的正确方法是什么?
仅当前面的字符是纯表情符号字符时,添加肤色修饰符才有效。事实证明,你的"????????"
实际上是由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("????")) // ????????????
请注意,此代码不会对原始字符串支持肤色进行任何验证。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)