mgy*_*yky 3 string emoji swift
为什么isEmoji实例属性对数字返回 true?
检查下面的示例:
let scalars: [Unicode.Scalar] = ["", "+", "1"]
for s in scalars {
print(s, "-->", s.properties.isEmoji)
}
Run Code Online (Sandbox Code Playgroud)
// --> true
// + --> false
// 1 --> true...
Run Code Online (Sandbox Code Playgroud)
等等什么?
但为什么?问题是如何正确使用数字的 isEmoji 属性。
如果您不熟悉 isEmoji 实例属性,它是一个布尔值,指示标量是否具有表情符号表示形式,以及它是否是默认值。
\n它适用于 iOS 10.2+、iPadOS 10.2+、macOS 10.12.2+、Mac Catalyst 10.2+、tvOS 10.1+、watchOS 3.1.1+、visionOS 1.0+ Beta。
\n遇到这个问题后我做了一些研究,并在Apple的文档中找到了答案。
\n最终结果为真,因为ASCII 数字有非默认的表情符号呈现;一些平台以另一种外观呈现它们。
\n由于这种行为,仅在单个标量上测试isEmoji不足以确定文本单元是否呈现为表情符号;正确的测试需要检查字符中的多个\n标量。
\n除了检查基本标量是否具有 isEmoji == true 之外,您还必须检查其默认呈现(请参阅 isEmojiPresentation)并确定其后面是否跟随会修改呈现的变体选择器。此属性对应于Unicode 标准中的 \xe2\x80\x9cEmoji\xe2\x80\x9d 属性。
\n所以你可以像下面这样检查:
\nlet scalars: [Unicode.Scalar] = ["", "+", "1"]\n\nfor s in scalars {\n print(s, "-->", (s.properties.isEmoji && s.properties.isEmojiPresentation))\n}\nRun Code Online (Sandbox Code Playgroud)\n// --> true\n// + --> false\n// 1 --> false\nRun Code Online (Sandbox Code Playgroud)\n\n
| 归档时间: |
|
| 查看次数: |
742 次 |
| 最近记录: |