Swift 5 – 如何在可能将肤色表情符号作为输入的案例语句中使用基本表情符号?

Swift 5 – How to use base emoji in case statement that may have skin-tone emoji as input?

我的开关输入可能是也可能不是带有肤色的表情符号。

我是否必须测试每个具有肤色的表情符号的所有六种变体,或者是否有一种简单的单行方法可以从表情符号修饰符中去除基本表情符号?

这是我失败的代码:

switch blah {
    case "✅":
        daIcon = self.iconComplete!
    case "":
        daIcon = self.iconConfirmed!
    case "":
        daIcon = self.iconMessageLeft!
    case "":
        daIcon = self.iconLookingForDocs!
    case "☎️":
        daIcon = self.iconVoiceMailLeft!
    case "❌":
        daIcon = self.iconPostponed!
    default:
         daIcon = self.iconRedQuestion!
}

编辑:

从编程的角度来看,我对所有这些都是新手。我知道表情符号占用的不仅仅是“a”字节,而且零宽度的 whatchamacallits 存在,但我需要了解更多信息并不是因为上面的 switch 语句失败。哈哈

在这个特定的用例中,我只是使用一系列表情符号来表示各种状态。因此,我预计不需要任何更复杂的组合(例如 ‍‍)。

完整列表是:✅,⭕,☎️,❓,‼️,⁉️,⭕️,❌,⚠️,当然还有.

执行此操作的一种方法是首先检查字符串是否为单个 Character,然后获取第一个 unicode 标量。那将是未修改的基本表情符号。

您可以为 String、s

编写自己的 ~= 运算符
// or if...else if you are doing other stuff after the switch
guard blah.count == 1 else {
    daIcon = self.iconRedQuestion!
    return
}
switch blah.unicodeScalars.first {
case "✅":
    daIcon = self.iconComplete!
case "":
    daIcon = self.iconConfirmed!
case "":
    daIcon = self.iconMessageLeft!
case "":
    daIcon = self.iconLookingForDocs!
case "☎":
    daIcon = self.iconVoiceMailLeft!
case "❌":
    daIcon = self.iconPostponed!
default:
    daIcon = self.iconRedQuestion!
}

请注意,☎️ 表情符号实际上是 ☎ (U+260E 黑色电话) 加上一个变体选择器。在案例中你应该只使用 U+260E。

你也可以使用Smile,具体来说就是unmodify(emoji:)isSingleEmoji函数,它们的实现方式与上面类似。

请注意,此方法会挑选出 ZWJ 序列中的第一个表情符号,这可能是预期的,也可能不是预期的。