¿Cómo saber si se mostrarán dos emojis como un emoji?

El emoji 👍🏼 consiste en 2 UnicodeScalars 👍 U + 1F44D, 🏼 U + 1F3FC.

¿Cómo se puede identificar esto como 1 emoji ‘mostrado’, ya que se mostrará como tal en iOS?

Actualización para Swift 4 (Xcode 9)

A partir de Swift 4, una “secuencia de Emoji” se trata como un único grupo de grafemas (de acuerdo con el estándar Unicode 9):

let s = "a👍🏼b👨‍❤️‍💋‍👨" print(s.count) // 4 

por lo que las otras soluciones ya no son necesarias.


(Respuesta anterior para Swift 3 y antes 🙂

Una opción posible es enumerar y contar las “secuencias de caracteres compuestos” en la cadena:

 let s = "a👍🏼b👨‍❤️‍💋‍👨" var count = 0 s.enumerateSubstringsInRange(s.startIndex.. 

Otra opción es encontrar el rango de las secuencias de caracteres compuestas en un índice dado:

 let s = "👨‍❤️‍💋‍👨" if s.rangeOfComposedCharacterSequenceAtIndex(s.startIndex) == s.characters.indices { print("This is a single composed character") } 

Como métodos de extensión de String :

 // Swift 2.2: extension String { var composedCharacterCount: Int { var count = 0 enumerateSubstringsInRange(characters.indices, options: .ByComposedCharacterSequences) { (_, _, _, _) in count += 1 } return count } var isSingleComposedCharacter: Bool { return rangeOfComposedCharacterSequenceAtIndex(startIndex) == characters.indices } } // Swift 3: extension String { var composedCharacterCount: Int { var count = 0 enumerateSubstrings(in: startIndex.. 

Ejemplos:

 "👍🏼".composedCharacterCount // 1 "👍🏼".characters.count // 2 "👨‍❤️‍💋‍👨".composedCharacterCount // 1 "👨‍❤️‍💋‍👨".characters.count // 4 "🇩🇪🇨🇦".composedCharacterCount // 2 "🇩🇪🇨🇦".characters.count // 1 

Como puede ver, el número de caracteres Swift (clústeres de grafemas extendidos) puede ser mayor o menor que el número de secuencias de caracteres compuestas.