A better way to create a collection view with emoji are with their unicode characters. https://apps.timwhitlock.info/emoji/tables/unicode lists the emoji that are available. One implementation I have used is my answer here: Emoji Picker Ios Swift
This behavior is actually expected. In swift 3.0, emoji is not counted as grapheme cluster. Many emoji are actually a sequence of single emoji connected by zero with joiner. So the character property is actually giving you all the single emoji. That’s why you have 408 single emoji from 291 top level emoji
This behavior of emoji string get improved a lot in swift 4. In swift 4, you can directly call count to your emoji string and you will get exactly 291 as result
For further information about this topic, have a look here