You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift 5 如何在switch的case语句中处理可能带肤色修饰的emoji匹配问题

解决方案

带肤色修饰的emoji比基础emoji多了Unicode范围为U+1F3FB ~ U+1F3FF的肤色修饰字符,不需要枚举全部6种肤色变体,提前过滤输入中的肤色修饰符后再做匹配即可。

核心预处理代码(Swift 单行实现)

// 过滤所有肤色修饰符,输出无修饰的基础emoji
let baseEmoji = blah.unicodeScalars.filter { !(0x1F3FB...0x1F3FF ~= $0.value) }.description

如果需要兼容带/不带U+FE0F变体选择符的emoji(比如列表中的☎️、⭕️这类自带隐形变体符的emoji,避免不同输入格式导致匹配失败),可以扩展过滤规则:

let baseEmoji = blah.unicodeScalars.filter { scalar in
    !(0x1F3FB...0x1F3FF ~= scalar.value) && scalar.value != 0xFE0F
}.description

调整后的完整匹配逻辑

// 先处理输入得到基础emoji再匹配
let baseEmoji = blah.unicodeScalars.filter { !(0x1F3FB...0x1F3FF ~= $0.value) && $0.value != 0xFE0F }.description

switch baseEmoji {
    case "✅":
        daIcon = self.iconComplete!
    case "👍":
        daIcon = self.iconConfirmed!
    case "🤞":
        daIcon = self.iconMessageLeft!
    case "👀":
        daIcon = self.iconLookingForDocs!
    case "☎️":
        daIcon = self.iconVoiceMailLeft!
    case "❌":
        daIcon = self.iconPostponed!
    // 剩余用到的emoji直接添加对应case即可,无需加肤色后缀
    default:
         daIcon = self.iconRedQuestion!
}

场景适配说明

该方案完全适配当前需求,仅过滤肤色修饰符和变体选择符,不需要处理零宽连接符拼接的复杂组合emoji,无需提前枚举所有肤色变体,性能开销可忽略。

内容的提问来源于stack exchange,提问作者HirsuteJim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 05:06:01