質問

他のいくつかのemoji文字と同様に、0x0001F1E9 0x0001F1EAの組み合わせ(ドイツ語のフラグ)は、実際には2つの異なるUnicode文字ポイントであるが、画面上の単一文字として表されます。それはSwiftの1つまたは2つの異なる文字として表されますか?

役に立ちましたか?

解決

let flag = "\u{1f1e9}\u{1f1ea}"
.

その後flagは∞です。

より多くの地域インジケータ記号については、以下を参照してください。
http://en.wikipedia.org/wiki/regional_indicator_symbol

他のヒント

「拡張Grapheme Clusters」のサポートは、その間にSWIFTに追加されました。 文字列の文字を繰り返すと、単一の文字が生成されます。 「フラグ」:

let string = "Hi🇩🇪!"
for char in string.characters {
    print(char)
}
.

出力:

H
i
🇩🇪
!
.

Swift 5では、 unicodeScalars プロパティを繰り返すことができます。作成するUnicodeスカラー値を印刷するためのフラグemoji文字の概要:

let emoji: Character = "🇮🇹"
for scalar in emoji.unicodeScalars {
    print(scalar)
}
/*
 prints:
 🇮
 🇹
 */
.

これらのスカラーを組み合わせる(それは地域指標記号)、あなたは絵文字の旗を得る:

let italianFlag = "🇮" + "🇹"
print(italianFlag) // prints: 🇮🇹
print(italianFlag.count) // prints: 1
.


Unicode.Scalarインスタンスには、プロパティ value 数値表現を表示するには、

let emoji: Character = "🇮🇹"
for scalar in emoji.unicodeScalars {
    print(scalar.value)
}
/*
 prints:
 127470
 127481
 */
.

これらの数値表現からUnicodeスカラーを作成してから、それらを文字列に関連付けることができます。

let scalar1 = Unicode.Scalar(127470)
let scalar2 = Unicode.Scalar(127481)
let italianFlag = String(scalar1!) + String(scalar2!)
print(italianFlag) // prints: 🇮🇹
print(italianFlag.count) // prints: 1
.


必要に応じて、Unicode.Scalar String スカラー値を変換するには関連性がある場合があります。 16進値に:

let emoji: Character = "🇮🇹"
for scalar in emoji.unicodeScalars {
    print(String(scalar.value, radix: 16, uppercase: true))
}
/*
 prints:
 1F1EE
 1F1F9
 */
.
let italianFlag = "\u{1F1EE}\u{1F1F9}"
print(italianFlag) // prints: 🇮🇹
print(italianFlag.count) // prints: 1
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top