From the isEmoji documentation you posted:
testing isEmoji alone on a single scalar is insufficient to determine
if a unit of text is rendered as an emoji; a correct test requires
inspecting multiple scalars in a Character.
Therefore, you can use following code to check if there is an emoji presentation:
"".unicodeScalars.contains(where: { $0.properties.isEmoji }) // true
"5".unicodeScalars.contains(where: { $0.properties.isEmoji }) // true, as expected (5️⃣)
"a".unicodeScalars.contains(where: { $0.properties.isEmoji }) // false
and this code to check if the default is the emoji presentation:
"".unicodeScalars.contains(where: { $0.properties.isEmojiPresentation }) // true
"5".unicodeScalars.contains(where: { $0.properties.isEmojiPresentation }) // false
"a".unicodeScalars.contains(where: { $0.properties.isEmojiPresentation }) // false
Here is an extension for convenience:
extension Character {
var hasEmojiPresentation: Bool {
unicodeScalars.contains(where: { $0.properties.isEmoji })
}
var hasEmojiPresentationAsDefault: Bool {
unicodeScalars.contains(where: { $0.properties.isEmojiPresentation })
}
}
Usage:
Character("").hasEmojiPresentation // true
Character("").hasEmojiPresentationAsDefault // true
Character("5").hasEmojiPresentation // true
Character("5").hasEmojiPresentationAsDefault // false
Character("a").hasEmojiPresentation // false
Character("a").hasEmojiPresentationAsDefault // false
Note: The outcome may be different depending on the used Xcode version, since they contain different sets of emojis.