Il personaggio π©βπ©βπ§βπ¦ (famiglia con due donne, una ragazza e un ragazzo) Γ¨ codificato come tale:
U+1F469
WOMAN
,
βU+200D
ZWJ
,
U+1F469
WOMAN
,
U+200D
ZWJ
,
U+1F467
GIRL
,
U+200D
ZWJ
,
U+1F466
BOY
Quindi Γ¨ codificato in modo molto interessante; l'obiettivo perfetto per un test unitario. Tuttavia, Swift non sembra sapere come trattarlo. Ecco cosa intendo:
"π©βπ©βπ§βπ¦".contains("π©βπ©βπ§βπ¦") // true
"π©βπ©βπ§βπ¦".contains("π©") // false
"π©βπ©βπ§βπ¦".contains("\u{200D}") // false
"π©βπ©βπ§βπ¦".contains("π§") // false
"π©βπ©βπ§βπ¦".contains("π¦") // true
Quindi, Swift dice che contiene se stesso (buono) e un ragazzo (buono!). Ma poi dice che non contiene una donna, una ragazza o un falegname a larghezza zero. Cosa sta succedendo qui? PerchΓ© Swift sa che contiene un ragazzo ma non una donna o una ragazza? Potrei capire se lo trattasse come un singolo personaggio e lo riconoscesse solo contenendo se stesso, ma il fatto che abbia ottenuto un sottocomponente e nessun altro mi sconcerta.
Questo non cambia se uso qualcosa del genere "π©".characters.first!
.
Ancora piΓΉ confuso Γ¨ questo:
let manual = "\u{1F469}\u{200D}\u{1F469}\u{200D}\u{1F467}\u{200D}\u{1F466}"
Array(manual.characters) // ["π©β", "π©β", "π§β", "π¦"]
Anche se ho inserito gli ZWJ, questi non si riflettono nella serie di caratteri. Quello che seguì fu un piccolo racconto:
manual.contains("π©") // false
manual.contains("π§") // false
manual.contains("π¦") // true
Quindi ottengo lo stesso comportamento con l'array di caratteri ... il che Γ¨ estremamente fastidioso, poichΓ© so che aspetto ha l'array.
Anche questo non cambia se uso qualcosa del genere "π©".characters.first!
.
"π©βπ©βπ§βπ¦".contains("\u{200D}")
restituisce comunque false, non sono sicuro che si tratti di un bug o di una funzione.