ios - sorprendido - que significa este emoji π
ΒΏCΓ³mo saber si dos emojis se mostrarΓ‘n como un emoji? (1)
El emoji ππΌ consta de 2 unicodeScalars π U + 1F44D, πΌ U + 1F3FC.
¿Cómo se puede identificar como 1 emoji ''mostrado'' como 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 solo grupo de grafemas (de acuerdo con el estándar Unicode 9):
let s = "aππΌbπ¨β€οΈππ¨"
print(s.count) // 4
entonces las otras soluciones ya no son necesarias.
(Antigua respuesta para Swift 3 y anteriores :)
Una posible opción es enumerar y contar las "secuencias de caracteres compuestas" en la cadena:
let s = "aππΌbπ¨β€οΈππ¨"
var count = 0
s.enumerateSubstringsInRange(s.startIndex..<s.endIndex,
options: .ByComposedCharacterSequences) {
(char, _, _, _) in
if let char = char {
count += 1
}
}
print(count) // 4
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..<endIndex, options: .byComposedCharacterSequences) {
(_, _, _, _) in count += 1
}
return count
}
var isSingleComposedCharacter: Bool {
return rangeOfComposedCharacterSequence(at: startIndex) == startIndex..<endIndex
}
}
Ejemplos:
"ππΌ".composedCharacterCount // 1
"ππΌ".characters.count // 2
"π¨β€οΈππ¨".composedCharacterCount // 1
"π¨β€οΈππ¨".characters.count // 4
"π©πͺπ¨π¦".composedCharacterCount // 2
"π©πͺπ¨π¦".characters.count // 1
Como puede ver, la cantidad de caracteres Swift (grupos de grafemas extendidos) puede ser mayor o menor que la cantidad de secuencias de caracteres compuestas.