Персонаж 👩👩👧👦 (семья с двумя женщинами, одной девушкой и одним мальчиком) кодируется как таковой:
U+1F469
WOMAN
, U+200D
ZWJ
, U+1F469
WOMAN
, U+200D
ZWJ
, U+1F467
GIRL
, U+200D
ZWJ
, U+1F466
BOY
Так что это очень интересно кодируется; идеальная цель для unit test. Однако Свифт, похоже, не знает, как его лечить. Вот что я имею в виду:
"👩👩👧👦".contains("👩👩👧👦") // true
"👩👩👧👦".contains("👩") // false
"👩👩👧👦".contains("\u{200D}") // false
"👩👩👧👦".contains("👧") // false
"👩👩👧👦".contains("👦") // true
Итак, Свифт говорит, что он содержит себя (хорошо) и мальчика (хорошо!). Но тогда он говорит, что в нем нет женщины, девушки или столяра с нулевой шириной. Что здесь происходит? Почему Свифт знает, что в нем есть мальчик, но не женщина или девочка? Я мог бы понять, рассматривал ли он его как одного персонажа и только признавал, что он содержит себя, но тот факт, что он получил один субкомпонент, и никого другого не смущает меня.
Это не меняется, если я использую что-то вроде "👩".characters.first!
.
Еще большее недоумение:
let manual = "\u{1F469}\u{200D}\u{1F469}\u{200D}\u{1F467}\u{200D}\u{1F466}"
Array(manual.characters) // ["👩", "👩", "👧", "👦"]
Даже если я разместил ZWJ там, они не отражаются в массиве символов. Дальше было немного сказано:
manual.contains("👩") // false
manual.contains("👧") // false
manual.contains("👦") // true
Итак, я получаю такое же поведение с массивом символов... что в высшей степени раздражает, так как я знаю, как выглядит массив.
Это также не изменяется, если я использую что-то вроде "👩".characters.first!
.