字符👩👩👧👦(有两个女人,一个女孩和一个男孩的家庭)是这样编码的:
< p > # EYZ0 # EYZ2, < br > # EYZ0 # EYZ2, < br > # EYZ0 # EYZ1, < br > # EYZ0 # EYZ1, < br > # EYZ0 # EYZ2, < br > # EYZ0 # EYZ1, < br > # EYZ0 # EYZ2 < / p >所以它的编码非常有趣;这是单元测试的完美目标。然而,斯威夫特似乎不知道如何治疗它。我的意思是:
"👩👩👧👦".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!
这样的东西,这也不会改变。