我的开关输入可能是也可能不是带有肤色的表情符号。
我是否必须测试每个具有肤色的表情符号的所有六种变体,或者是否有一种简单的单行方法可以从表情符号修饰符中去除基本表情符号?
这是我失败的代码:
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 序列中的第一个表情符号,这可能是预期的,也可能不是预期的。
关于Swift 5 – 如何在可能将肤色表情符号作为输入的案例语句中使用基本表情符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69454095/