【问题标题】:Swift 5 isEmoji method returns true for a number?Swift 5 isEmoji 方法为数字返回 true?
【发布时间】:2020-11-24 08:45:43
【问题描述】:

如下例所示,isEmoji 方法为 number 返回 true

let scalars: [Unicode.Scalar] = ["????", "+", "1"]
for s in scalars {
    print(s, "-->", s.properties.isEmoji)
}
// ???? --> true
// + --> false
// 1 --> true... wait what? ????

为什么如何确定我的示例中的最后一种情况。

【问题讨论】:

    标签: swift string emoji


    【解决方案1】:

    我在遇到这个问题后做了一点搜索,并在Apple's documentation找到了答案。我与您分享,以免您将来浪费宝贵的时间:

    最终结果为真,因为 ASCII 数字有非默认值 表情符号演示;一些平台用替代品呈现这些 外观。

    由于这种行为,单独测试 isEmoji 单个标量不足以确定一个文本单元是否是 呈现为表情符号;正确的测试需要检查多个 字符中的标量。除了检查是否基地 标量有 isEmoji == true,你还必须检查它的默认值 演示文稿(见 isEmojiPresentation)并判断是否是 后跟一个可以修改演示文稿的变体选择器。 该属性对应Unicode Standard中的“Emoji”属性。

    解决方案

    所以你可以像下面的行一样检查:

    let scalars: [Unicode.Scalar] = ["?", "+", "1"]
    for s in scalars {
        print(s, "-->", (s.properties.isEmoji && s.properties.isEmojiPresentation))
    }
    // ? --> true
    // + --> false
    // 1 --> false
    

    【讨论】:

    • 这不适用于"✈️",它为isEmoji返回true,为isEmojiPresentation返回false
    • 不适用于那些:▶️3️⃣?。
    猜你喜欢
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    相关资源
    最近更新 更多