Swift isEmoji isEmojiPresentation

Viewed 130
1 Answers

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.

Related