Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Strings and Characters in Swift

4,777 views

Published on

Swift 2シンポジウム #2
2015/08/30(日) 13:00 〜 18:00

Published in: Software
  • Sex in your area is here: ❤❤❤ http://bit.ly/36cXjBY ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating for everyone is here: ❤❤❤ http://bit.ly/36cXjBY ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Strings and Characters in Swift

  1. 1. Strings and Characters in Swift Goichi Hirakawa
  2. 2. 自己紹介 • 平川 剛一 (Goichi Hirakawa) • @gooichi • OS X / iOSプログラマ • Objective-C歴XX年…
  3. 3. アジェンダ • String型の特徴 • String型の構造 • String型の初期化 • String型の等価性
  4. 4. String型の特徴 • Unicode規格に正確(Unicode-Correct) • ロケール非依存(Local-Insensitive) • 値型(Value Type) • 4つのビュー(Views) • Objective-Cブリッジ(Objective-C Bridge)
  5. 5. Unicode規格に正確 • Swift文字列はUnicode規格に正確に設計 • 文字符号化形式:UTF-8、UTF-16、UTF-32 • 例えば、等価演算子 == は正準等価をチェック
  6. 6. ロケール非依存 • Swift文字列の基本的な操作はロケール非依存 • 常に基本的な文字列操作のためのデフォルトの Unicodeアルゴリズムを使用 • ロケール依存の操作にはNSStringのAPIが必要
  7. 7. 値型 • 各文字列変数、let束縛、保存されたプロパティは 独立した値を持つ • Copy-on-Write:変更時にデータコピー
  8. 8. 4つのビュー • CharacterView • UnicodeScalarView • UTF16View • UTF8View
  9. 9. Objective-Cブリッジ • NSStringとしてObjective-Cへブリッジ • 任意のNSStringのサブクラスがStringになれる • NSString→Stringは明示的キャスト必要(1.2∼) • 表現や効率に保証はない
  10. 10. String型の構造 • String型はそれ自体、何のコレクションでもない • 意味のあるコレクションとして文字列の内容を提示するプロパティを持つ: • characters: Character(拡張書記素クラスタ)のコレクション • unicodeScalars: UnicodeScalar(Unicodeスカラ)のコレクション • utf16: UTF16.CodeUnit(UTF-16のコード単位)のコレクション • utf8: UTF8.CodeUnit(UTF-8のコード単位)のコレクション • NSStringオブジェクトは 概念的には プラットフォームエンディアンのUTF-16 
 → 文字列の長さ、文字インデックス、範囲がUTF-16の単位で表現
  11. 11. Unicode用語 • コードポイント(Code Point) • Unicodeコード空間の任意の値; すなわち0から10FFFF(21-bit) • コード単位(Code Unit) • 符号化されたテキストの単位を表現する最小bitの組み合わせ • Unicodeスカラ(Unicode Scalar)= SwiftのUnicodeScalar • 上位/下位サロゲートペアのコードポイントを除く任意のコードポイント • 具体的には、0∼D7FFとE000∼10FFFF • UTF-32と同じ • 拡張書記素クラスタ(Extended Grapheme Cluster)= SwiftのCharacter • 人が読める単一の文字を生成する1つ以上のUnicodeスカラのシーケンス
  12. 12. ビューサンプル Dog‼🐶 Character D U+0044 o U+006F g U+0067 ‼ U+203C 🐶 U+1F436 Unicode Scalar (UTF-32) コード 単位 0x44 0x6F 0x67 0x203C 0x1F436 位置 0 1 2 3 4 UTF-16 コード 単位 0x44 0x6F 0x67 0x203C 0xD83D 0xDC36 位置 0 1 2 3 4 5 UTF-8 コード 単位 0x44 0x6F 0x67 0xE2 0x80 0xBC 0xF0 0x9F 0x90 0xB6 位置 0 1 2 3 4 5 6 7 8 9
  13. 13. String型の初期化 • Character(s) • UnicodeScalar(s) • UTF16View • UTF8View • Number, Streamable, CustomStringConvertible, CustomDebugStringConvertible, etc… • NSString
  14. 14. String型の等価性 • 文字列や文字の等価性 • NSStringクラスの等価性 • CJK統合漢字とCJK互換漢字 • 異体字セレクタ
  15. 15. 文字列や文字の等価性 • 等価演算子(==)と非等価演算子(!=)で確認 • String / Character共に拡張書記素クラスタが
 正準等価 の場合に等しいとみなす • ロケールに依存しない
  16. 16. Unicodeの等価性 • 正準等価(Canonical Equivalent) • 異なるUnicodeスカラでも同じ言語的意味と外観を持つ
 拡張書記素クラスタ • 例)U+00E9 ( é ) == U+0065 ( e ) + U+0301 ( ́ ) • 互換等価(Compatibility Equivalent) • 正準等価より更に広い範囲を等価とみなす弱い等価性 • フォント、改行、丸囲み、幅、回転、上付き下付き、組文字、分数等々 • 例)U+2460 ( ① ) == U+0031( 1 )
  17. 17. NSStringクラスの等価性 • -isEqualToString:はUTF-16の文字単位で比較 • NSStringオブジェクトに等価演算子( == )を使 うと-isEqual:経由で-isEqualToString:が呼ばれる • compare:関連メソッドは正準/互換表現で比較 (Undocumented、詳細不明)
  18. 18. 等価性サンプル (1) • Swift let string1 = "u{E9}" // é let string2 = "u{65}u{301}" // e + ́ print(string1 == string2) // true • Objective-C let nsString1: NSString = string1 print(nsString1 == string2) // false print(nsString1.isEqualToString(string2)) // false print(nsString1.compare(string2) == NSComparisonResult.OrderedSame) // true
  19. 19. CJK統合漢字とCJK互換漢字 • CJK統合漢字 • Unicodeの符号化用漢字集合 • 中国、日本、韓国、ベトナムで共通して使われる • CJK互換漢字 • 国ごとの既存の文字コードとの互換性のための領域 • 日本ではIBM拡張文字やJIS X 0213の旧字体など • 一部を除き、同じ字源の漢字がCJK統合漢字に含まれる • それらのCJK統合漢字とは 正準等価 (正規化で置換)
  20. 20. 等価性サンプル (2) • 塚 と (外観が異なるが互換漢字) let unifiedKanji = "u{585A}" // 塚 let compatiKanji = "u{FA10}" // print(unifiedKanji == compatiKanji) // true • 崎 と (互換漢字ではなく統合漢字) let unifiedKanji = "u{5D0E}" // 崎 let nonCompatiKanji = "u{FA11}" // print(unifiedKanji == nonCompatiKanji) // false
  21. 21. 異体字セレクタ • IVS: Ideographic Variation Sequence/Selector • 文字の字形をより詳細に指定する選択子 • それぞれの文字コードの後に選択子を追加 • 統合された異体字を区別するために追加 • 正規化の影響を受けない( 正準等価 でない)
  22. 22. 漢字コードサンプル 塚 と (それ以外の関連字は省略) 種類 コードシーケンス 表示 CJK統合漢字 U+585A 塚 CJK互換漢字 U+FA10 IVS U+585A U+E0100 ※1 U+585A U+E0103 ※2 塚 U+585A U+E0101 ※1 U+585A U+E0105 ※2 標準異体字 ※3 U+585A U+FE01 塚 U+585A U+FE00 ※1 アドビシステムズが Adobe-Japan1 で登録 ※2 汎用電子が Hanyo-Denshi で登録 ※3 Unicode標準で命名し定義、IVSとの違いはない
  23. 23. 等価性サンプル (3) • CJK統合漢字とCJK互換漢字のみ等価 let unifiedKanji = "u{585A}" // 塚 let compatiKanji = "u{FA10}" // print(unifiedKanji == compatiKanji) // true • それ以外の組み合わせはすべて非等価 • IVS同士でも異体字セレクタが異なれば非等価
 (Adobe-Japan1とHanyo-Denshiは非互換) let adobeKanji = "u{585A}u{E0100}" // 塚 let hanyoKanji = "u{585A}u{E0103}" // 塚 print(adobeKanji == hanyoKanji) // false
  24. 24. まとめ • String型の特徴、構造、初期化、等価性について • 等価性については、NSStringとの相違点、Unicodeの仕様、
 特に漢字コードには注意(問題はSwiftではなくUnicodeの仕様…) • Swift 2でもNSString APIはもちろん必要 • ロケールに依存する処理 • 正規化 • 検索、正規表現 • 等々

×