Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

🫥 Swift isEmoji isEmojiPresentation

Why method isEmojiPresentation return false?

"🫥".unicodeScalars.first?.properties.isEmoji // Optional(false)

"🫥".unicodeScalars.first?.properties.isEmojiPresentation // Optional(false)

enter image description here

Docs

isEmoji - https://developer.apple.com/documentation/swift/unicode/scalar/properties-swift.struct/isemoji

isEmojiPresentation - https://developer.apple.com/documentation/swift/unicode/scalar/properties-swift.struct/isemojipresentation

UDP:

enter image description here

like image 221
Anastasiia Avatar asked Oct 17 '25 17:10

Anastasiia


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.

like image 174
Daniel Avatar answered Oct 20 '25 08:10

Daniel