Swift 5 -如何在case语句中使用基础表情符号,可能有肤色表情符号作为输入?



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

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

这是我失败的代码:

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;"字节和零宽度之类的东西存在,但不是因为上面的开关语句失败了,我需要了解更多。LOL

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

完整列表是:✅,⭕,🤞🏻,👍🏻,👀,☎️,❓,‼️,⁉️,💯,🚫,🛑,⭕️,❌,⚠️,🙏🏻,🎯,📧,📆,😷当然,🖖🏻。

可以做到这一点的一种方法是首先检查字符串是否为单个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 BLACK phone)加上一个变体选择器。在这种情况下,您应该只使用U+260E。

您也可以使用Smile,特别是unmodify(emoji:)isSingleEmoji函数,其实现与上面类似。

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

相关内容

最新更新