为什么isEmojiinstance属性对数字返回true?检查下面的示例:
let scalars: [Unicode.Scalar] = ["🤓", "+", "1"] for s in scalars { print(s, "-->", s.properties.isEmoji) }
字符串
// 🤓 --> true // + --> false // 1 --> true...
型等什么?😦但是为什么?问题是如何以正确的方式将isEmoji属性用于数字。
gg0vcinb1#
什么如果您不熟悉isEmoji示例属性,它是一个布尔值,指示标量是否具有emoji表示,以及它是否是默认值。它适用于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。面对这个问题后我做了一点研究,在Apple's documentation中找到了答案。为什么最终结果为true,因为ASCII数字为非默认emoji表示;一些平台用替代外观呈现这些。由于这种行为,单独在单个标量上测试isEmoji不足以确定文本单元是否被渲染为emoji;正确的测试需要检查字符中的多个 * 标量。除了检查基础标量是否具有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
型🎉
1条答案
按热度按时间gg0vcinb1#
什么
如果您不熟悉isEmoji示例属性,它是一个布尔值,指示标量是否具有emoji表示,以及它是否是默认值。
它适用于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。
面对这个问题后我做了一点研究,在Apple's documentation中找到了答案。
为什么
最终结果为true,因为ASCII数字为非默认emoji表示;一些平台用替代外观呈现这些。
由于这种行为,单独在单个标量上测试isEmoji不足以确定文本单元是否被渲染为emoji;正确的测试需要检查字符中的多个 * 标量。
除了检查基础标量是否具有isEmoji == true,还必须检查其默认表示(请参阅isEmojiPresentation),并确定它后面是否有一个可以修改表示的变体选择器。此属性对应于Unicode Standard中的“Emoji”属性。
解决方案
所以你可以像下面的行一样检查:
字符串
最终结果
型
🎉