Submit Search
Upload
Strings and Characters in Swift
•
9 likes
•
5,268 views
Goichi Hirakawa
Follow
Swift 2シンポジウム #2 2015/08/30(日) 13:00 〜 18:00
Read less
Read more
Software
Report
Share
Report
Share
1 of 24
Download now
Download to read offline
Recommended
すごいHaskell読書会 第7章 (前編)
すごいHaskell読書会 第7章 (前編)
Suguru Hamazaki
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
Ra Zon
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
Ra Zon
HiroshimaJUG の「Java8 Lambda ハンズオン with すごい広島」を5分で振り返る
HiroshimaJUG の「Java8 Lambda ハンズオン with すごい広島」を5分で振り返る
tsudaa
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
parrotstudio
Effective java 輪読会 第2章 項目5,6,7
Effective java 輪読会 第2章 項目5,6,7
Appresso Engineering Team
Word bench nagoya 5月度
Word bench nagoya 5月度
Yoji Izumi
まだSwiftで消耗してるの?
まだSwiftで消耗してるの?
今城 善矩
Recommended
すごいHaskell読書会 第7章 (前編)
すごいHaskell読書会 第7章 (前編)
Suguru Hamazaki
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
Ra Zon
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
Ra Zon
HiroshimaJUG の「Java8 Lambda ハンズオン with すごい広島」を5分で振り返る
HiroshimaJUG の「Java8 Lambda ハンズオン with すごい広島」を5分で振り返る
tsudaa
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
parrotstudio
Effective java 輪読会 第2章 項目5,6,7
Effective java 輪読会 第2章 項目5,6,7
Appresso Engineering Team
Word bench nagoya 5月度
Word bench nagoya 5月度
Yoji Izumi
まだSwiftで消耗してるの?
まだSwiftで消耗してるの?
今城 善矩
Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウム
Yuichi Yoshida
プロトコル指向 - 夢と現実の狭間 #cswift
プロトコル指向 - 夢と現実の狭間 #cswift
Tomohiro Kumagai
NS Prefix 外伝 … Copy-On-Write #関モバ
NS Prefix 外伝 … Copy-On-Write #関モバ
Tomohiro Kumagai
Swift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposium
Tomohiro Kumagai
AWS Cognitoを実際のアプリで導入してハマったこと
AWS Cognitoを実際のアプリで導入してハマったこと
洋一郎 櫻井
Swift で JavaScript 始めませんか? #iOSDC
Swift で JavaScript 始めませんか? #iOSDC
Tomohiro Kumagai
AnyObject – 自分が見落としていた、基本の話
AnyObject – 自分が見落としていた、基本の話
Tomohiro Kumagai
OpenCVの基礎
OpenCVの基礎
領一 和泉田
OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた
徹 上野山
GANMA!でDDDをやってみてから1年くらい経った
GANMA!でDDDをやってみてから1年くらい経った
Yasuyuki Sugitani
Ddd × 新人教育
Ddd × 新人教育
侑亮 原田
Swift イニシャライザー復習会 #love_swift #akibaswift #21cafe
Swift イニシャライザー復習会 #love_swift #akibaswift #21cafe
Tomohiro Kumagai
OpenCV 3.0 on iOS
OpenCV 3.0 on iOS
Shuichi Tsutsumi
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
Tomohiro Kumagai
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Hiromi Ishii
とあるFlashの自動生成
とあるFlashの自動生成
Akineko Shimizu
Ruby 3の型推論やってます
Ruby 3の型推論やってます
mametter
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
Genya Murakami
197x 20090704 Scalaで並行プログラミング
197x 20090704 Scalaで並行プログラミング
Net Penguin
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3
Masahiro Wakame
Strings and characters in swift
Strings and characters in swift
Goichi Hirakawa
More Related Content
Viewers also liked
Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウム
Yuichi Yoshida
プロトコル指向 - 夢と現実の狭間 #cswift
プロトコル指向 - 夢と現実の狭間 #cswift
Tomohiro Kumagai
NS Prefix 外伝 … Copy-On-Write #関モバ
NS Prefix 外伝 … Copy-On-Write #関モバ
Tomohiro Kumagai
Swift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposium
Tomohiro Kumagai
AWS Cognitoを実際のアプリで導入してハマったこと
AWS Cognitoを実際のアプリで導入してハマったこと
洋一郎 櫻井
Swift で JavaScript 始めませんか? #iOSDC
Swift で JavaScript 始めませんか? #iOSDC
Tomohiro Kumagai
AnyObject – 自分が見落としていた、基本の話
AnyObject – 自分が見落としていた、基本の話
Tomohiro Kumagai
OpenCVの基礎
OpenCVの基礎
領一 和泉田
OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた
徹 上野山
GANMA!でDDDをやってみてから1年くらい経った
GANMA!でDDDをやってみてから1年くらい経った
Yasuyuki Sugitani
Ddd × 新人教育
Ddd × 新人教育
侑亮 原田
Swift イニシャライザー復習会 #love_swift #akibaswift #21cafe
Swift イニシャライザー復習会 #love_swift #akibaswift #21cafe
Tomohiro Kumagai
OpenCV 3.0 on iOS
OpenCV 3.0 on iOS
Shuichi Tsutsumi
Viewers also liked
(13)
Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウム
プロトコル指向 - 夢と現実の狭間 #cswift
プロトコル指向 - 夢と現実の狭間 #cswift
NS Prefix 外伝 … Copy-On-Write #関モバ
NS Prefix 外伝 … Copy-On-Write #関モバ
Swift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposium
AWS Cognitoを実際のアプリで導入してハマったこと
AWS Cognitoを実際のアプリで導入してハマったこと
Swift で JavaScript 始めませんか? #iOSDC
Swift で JavaScript 始めませんか? #iOSDC
AnyObject – 自分が見落としていた、基本の話
AnyObject – 自分が見落としていた、基本の話
OpenCVの基礎
OpenCVの基礎
OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた
GANMA!でDDDをやってみてから1年くらい経った
GANMA!でDDDをやってみてから1年くらい経った
Ddd × 新人教育
Ddd × 新人教育
Swift イニシャライザー復習会 #love_swift #akibaswift #21cafe
Swift イニシャライザー復習会 #love_swift #akibaswift #21cafe
OpenCV 3.0 on iOS
OpenCV 3.0 on iOS
Similar to Strings and Characters in Swift
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
Tomohiro Kumagai
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Hiromi Ishii
とあるFlashの自動生成
とあるFlashの自動生成
Akineko Shimizu
Ruby 3の型推論やってます
Ruby 3の型推論やってます
mametter
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
Genya Murakami
197x 20090704 Scalaで並行プログラミング
197x 20090704 Scalaで並行プログラミング
Net Penguin
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3
Masahiro Wakame
Similar to Strings and Characters in Swift
(8)
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
中3女子でもわかる constexpr
中3女子でもわかる constexpr
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
とあるFlashの自動生成
とあるFlashの自動生成
Ruby 3の型推論やってます
Ruby 3の型推論やってます
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
197x 20090704 Scalaで並行プログラミング
197x 20090704 Scalaで並行プログラミング
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3
More from Goichi Hirakawa
Strings and characters in swift
Strings and characters in swift
Goichi Hirakawa
WebKit Overview
WebKit Overview
Goichi Hirakawa
Server-side Swift
Server-side Swift
Goichi Hirakawa
Swift Type System
Swift Type System
Goichi Hirakawa
Swift API Design Guidelines (dec 3, 2015)
Swift API Design Guidelines (dec 3, 2015)
Goichi Hirakawa
New Objective-C Features for Swift 2.0
New Objective-C Features for Swift 2.0
Goichi Hirakawa
Objective-C Generics
Objective-C Generics
Goichi Hirakawa
Objective-C Generics LT version
Objective-C Generics LT version
Goichi Hirakawa
Mix and Match / Swift and Objective-C
Mix and Match / Swift and Objective-C
Goichi Hirakawa
More from Goichi Hirakawa
(9)
Strings and characters in swift
Strings and characters in swift
WebKit Overview
WebKit Overview
Server-side Swift
Server-side Swift
Swift Type System
Swift Type System
Swift API Design Guidelines (dec 3, 2015)
Swift API Design Guidelines (dec 3, 2015)
New Objective-C Features for Swift 2.0
New Objective-C Features for Swift 2.0
Objective-C Generics
Objective-C Generics
Objective-C Generics LT version
Objective-C Generics LT version
Mix and Match / Swift and Objective-C
Mix and Match / Swift and Objective-C
Strings and Characters in Swift
1.
Strings and Characters in
Swift Goichi Hirakawa
2.
自己紹介 • 平川 剛一
(Goichi Hirakawa) • @gooichi • OS X / iOSプログラマ • Objective-C歴XX年…
3.
アジェンダ • String型の特徴 • String型の構造 •
String型の初期化 • String型の等価性
4.
String型の特徴 • Unicode規格に正確(Unicode-Correct) • ロケール非依存(Local-Insensitive) •
値型(Value Type) • 4つのビュー(Views) • Objective-Cブリッジ(Objective-C Bridge)
5.
Unicode規格に正確 • Swift文字列はUnicode規格に正確に設計 • 文字符号化形式:UTF-8、UTF-16、UTF-32 •
例えば、等価演算子 == は正準等価をチェック
6.
ロケール非依存 • Swift文字列の基本的な操作はロケール非依存 • 常に基本的な文字列操作のためのデフォルトの Unicodeアルゴリズムを使用 •
ロケール依存の操作にはNSStringのAPIが必要
7.
値型 • 各文字列変数、let束縛、保存されたプロパティは 独立した値を持つ • Copy-on-Write:変更時にデータコピー
8.
4つのビュー • CharacterView • UnicodeScalarView •
UTF16View • UTF8View
9.
Objective-Cブリッジ • NSStringとしてObjective-Cへブリッジ • 任意のNSStringのサブクラスがStringになれる •
NSString→Stringは明示的キャスト必要(1.2∼) • 表現や効率に保証はない
10.
String型の構造 • String型はそれ自体、何のコレクションでもない • 意味のあるコレクションとして文字列の内容を提示するプロパティを持つ: •
characters: Character(拡張書記素クラスタ)のコレクション • unicodeScalars: UnicodeScalar(Unicodeスカラ)のコレクション • utf16: UTF16.CodeUnit(UTF-16のコード単位)のコレクション • utf8: UTF8.CodeUnit(UTF-8のコード単位)のコレクション • NSStringオブジェクトは 概念的には プラットフォームエンディアンのUTF-16 → 文字列の長さ、文字インデックス、範囲がUTF-16の単位で表現
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.
ビューサンプル 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.
String型の初期化 • Character(s) • UnicodeScalar(s) •
UTF16View • UTF8View • Number, Streamable, CustomStringConvertible, CustomDebugStringConvertible, etc… • NSString
14.
String型の等価性 • 文字列や文字の等価性 • NSStringクラスの等価性 •
CJK統合漢字とCJK互換漢字 • 異体字セレクタ
15.
文字列や文字の等価性 • 等価演算子(==)と非等価演算子(!=)で確認 • String
/ Character共に拡張書記素クラスタが 正準等価 の場合に等しいとみなす • ロケールに依存しない
16.
Unicodeの等価性 • 正準等価(Canonical Equivalent) •
異なるUnicodeスカラでも同じ言語的意味と外観を持つ 拡張書記素クラスタ • 例)U+00E9 ( é ) == U+0065 ( e ) + U+0301 ( ́ ) • 互換等価(Compatibility Equivalent) • 正準等価より更に広い範囲を等価とみなす弱い等価性 • フォント、改行、丸囲み、幅、回転、上付き下付き、組文字、分数等々 • 例)U+2460 ( ① ) == U+0031( 1 )
17.
NSStringクラスの等価性 • -isEqualToString:はUTF-16の文字単位で比較 • NSStringオブジェクトに等価演算子(
== )を使 うと-isEqual:経由で-isEqualToString:が呼ばれる • compare:関連メソッドは正準/互換表現で比較 (Undocumented、詳細不明)
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.
CJK統合漢字とCJK互換漢字 • CJK統合漢字 • Unicodeの符号化用漢字集合 •
中国、日本、韓国、ベトナムで共通して使われる • CJK互換漢字 • 国ごとの既存の文字コードとの互換性のための領域 • 日本ではIBM拡張文字やJIS X 0213の旧字体など • 一部を除き、同じ字源の漢字がCJK統合漢字に含まれる • それらのCJK統合漢字とは 正準等価 (正規化で置換)
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.
異体字セレクタ • IVS: Ideographic
Variation Sequence/Selector • 文字の字形をより詳細に指定する選択子 • それぞれの文字コードの後に選択子を追加 • 統合された異体字を区別するために追加 • 正規化の影響を受けない( 正準等価 でない)
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.
等価性サンプル (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.
まとめ • String型の特徴、構造、初期化、等価性について • 等価性については、NSStringとの相違点、Unicodeの仕様、 特に漢字コードには注意(問題はSwiftではなくUnicodeの仕様…) •
Swift 2でもNSString APIはもちろん必要 • ロケールに依存する処理 • 正規化 • 検索、正規表現 • 等々
Download now