4

一般に、Swift は、書記素クラスターを 1 文字としてカウントすることについて非常にスマートですたとえば、レバノンの国旗を作りたい場合、2 つの Unicode 文字を組み合わせることができます

  • U+1F1F1 地域指標記号文字 L
  • U+1F1E7 地域指標記号文字 B

予想どおり、これは Swift の 1 文字です。

let s = "\u{1f1f1}\u{1f1e7}"
assert(s.characters.count == 1)
assert(s.utf16.count == 4)
assert(s.utf8.count == 8)

ただし、Fitzpatrick Type-5 の自転車の絵文字を作成したいとしましょう。組み合わせたら

  • U+1F6B4 自転車乗り
  • U+1F3FE 絵文字修飾子 フィッツパトリック TYPE-5

Swift では、この組み合わせを2文字としてカウントします。

let s = "\u{1f6b4}\u{1f3fe}"
assert(s.characters.count == 2)   // <----- WHY?
assert(s.utf16.count == 4)
assert(s.utf8.count == 8)

なぜこの文字は 1 文字ではなく 2 文字なのですか?

1 であると予想する理由を示すために、このクラスターは実際には有効な絵文字として解釈されることに注意してください。

ここに画像の説明を入力

4

1 に答える 1