質問
他のいくつかの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 3は、String
構造体にUnicodeを実装しています。 Unicodeでは、すべてのフラグはのペアです。したがって、🇩🇪
は実際には🇩
とそれに続く🇪
が続きます(2つをコピーしてから隣に貼り付けてください)。
TL; DR
∞は、2つの コードポイントで構成されている1つの 文字 です。 EM>(別名スカラ)。これらは違います!
SWIFTは、String
の内部表現が何であるかを教えてわかりません。フルサイズ(32ビット)UnicodeコードポイントのリストとしてのString
と対話します。
for character in "Dog!🐶" {
println(character)
}
// prints D, o, g, !, 🐶
.
UTF-8またはUTF-16コードポイントのシーケンスとして文字列を処理したい場合は、utf8
またはutf16
プロパティを使用してください。ドキュメントの文字列と文字。
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
.