swift - Swift 5 isEmoji 方法为数字返回 true?
问题描述
就像下面的示例一样,isEmoji方法为数字返回true:
let scalars: [Unicode.Scalar] = ["", "+", "1"]
for s in scalars {
print(s, "-->", s.properties.isEmoji)
}
// --> true
// + --> false
// 1 --> true... wait what?
但是在我的示例中,为什么以及如何确定最后一种情况。
解决方案
遇到这个问题后,我做了一点搜索,并在Apple 的文档中找到了答案。我与您分享,以免您将来浪费宝贵的时间:
最终结果为真,因为 ASCII 数字具有非默认表情符号表示;一些平台以另一种外观呈现这些。
由于这种行为,仅在单个标量上测试isEmoji不足以确定文本单元是否呈现为表情符号;正确的测试需要检查一个字符中的多个 标量。除了检查基本标量是否具有 isEmoji == true 之外,您还必须检查其默认表示形式(请参阅 isEmojiPresentation)并确定它后面是否有会修改表示形式的变体选择器。此属性对应于Unicode 标准中的“表情符号”属性。
解决方案
因此,您可以像下面的行一样检查:
let scalars: [Unicode.Scalar] = ["", "+", "1"]
for s in scalars {
print(s, "-->", (s.properties.isEmoji && s.properties.isEmojiPresentation))
}
// --> true
// + --> false
// 1 --> false
推荐阅读
- java - Java 13:为什么缺少 javaFX 运行时组件?
- mqtt - 在 emqx 上开启本地缓存
- python - 在 Python 中安装 wordcloud 时出错,需要 Microsoft Visual C++ 14.0
- asp.net-core - .net core 中编码的.net core 反编译工具?
- python - pyspark 中的正则表达式来检查字母和空格(也可以使用 uni 代码)
- memory - 注销 M3 模型
- mongodb - SpringBoot 找不到处理方法来注册 mongdb 请求
- snowsql - 如何更改 snowsql cli 中的默认颜色?
- javascript - 如何使用对象数组过滤数组对象
- r - 从 R 中的变量名中删除 ``