2016-08-18 4 views
0

のCharacterViewとUnicodeScalarView間の異なる何次の2つのコードは、実質的に同じことは、String型

for character in "Dog!".characters { 
    print(character) 
} 

for character in "Dog!".unicodeScalars { 
    print(character) 
} 

はしかし、私は違いを発見しました。 charactersプロパティはCharacterViewのタイプで、unicodeScalarsタイプはUnicodeScalarViewのタイプです。

質問

それらの間の違いは何ですか?どのプロパティ

は、どのような状況のために好ましいですか?

多くのおかげ

+2

https://developer.apple.com/swift/blog/?id=30良い概要です。 - '' 'で試してみてください! –

+0

@MartinRありがとう – SLN

答えて

1

これはCharacterUnicodeScalarの差にダウンしています(例を持っていいだろう)。舞台裏

のUnicodeスカラー

、スウィフトのネイティブ文字列型は、Unicodeスカラ値から構築されています。 Unicodeのスカラーラテン小文字A( "A")、または前向きBABY CHICK( "")のためのU + 1F425のためのそのようなU + 0061のような文字や改質のためのユニークな21ビット数、です。

...

拡張書記素クラスタ

スウィフトの文字タイプのすべてのインスタンスが単一の拡張書記素クラスタを表します。拡張された書記素クラスタは、人間が読める単一の文字を生成する1つ以上のUnicodeスカラのシーケンスです(組み合わせた場合)。ここで

は一例です。文字éは、単一のUnicodeスカラーé(LATIN SMALL LETTER E WITH ACUTEまたはU + 00E9)として表すことができます。ただし、同じ文字を標準文字e(LATIN SMALL LETTER E、またはU + 0065)、続いてCOMBINING ACUTE ACCENTスカラー(U + 0301)のペアとして表すこともできます。 COMBINING ACUTE ACCENTスカラーは、それが先行するスカラーにグラフィカルに適用され、Unicode対応テキストレンダリングシステムによってレンダリングされるときにeをéに変換します。

Swift Programming Language GuideStrings and Charactersセクションから。私はあなたのことを考えることができ、多くの場合

は、人間の言語の最小単位として、彼らのように、Characterインスタンスを扱うことがしたいと思います。完全に拡張された書記素クラスターを考慮せずに修飾子を操作したいという状況は想像できません。

+0

こんにちはアレックス、助けてくれてありがとう – SLN

関連する問題