584 votes

Pourquoi les caractères emoji comme sont-ils traités si étrangement dans les chaînes Swift?

Le personnage

439voto

xoudini Points 5718

Cela concerne le fonctionnement du type String dans Swift et le fonctionnement de la méthode contains(_:) .

Le '

116voto

Rob Napier Points 92148

Le premier problème est que vous êtes à combler à la Fondation avec contains (Swift String n'est pas un Collection), donc c'est NSString comportement, je ne crois pas que les poignées composé Emoji autant de force que le Swift. Cela dit, Swift, je crois, est la mise en œuvre de l'Unicode 8 maintenant, qui avait également besoin de révision autour de cette situation en Unicode 10 (donc cela peut changer du tout au tout lorsqu'ils mettent en œuvre Unicode 10; je n'ai pas creusé dans la si elle sera ou non).

Pour simplifier la chose, débarrassons-nous de la Fondation, et l'utilisation de Swift, qui offre des vues qui sont plus explicites. Nous allons commencer avec les personnages:

"

78voto

Ben Leggiero Points 72

Il semble que Swift considère un ZWJ comme un cluster de graphèmes étendu avec le caractère le précédant immédiatement. Nous pouvons le voir lorsque vous mappez le tableau de caractères sur leur unicodeScalars :

 Array(manual.characters).map { $0.description.unicodeScalars }
 

Cela imprime ce qui suit à partir de LLDB:

 ▿ 4 elements
  ▿ 0 : StringUnicodeScalarView(" 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X