オプショナル型。
デジタルサーカス(株)⻑⾧長⾕谷川智希
なんとなく付ける ! ? 撲滅
⾃自⼰己紹介
⻑⾧長⾕谷川智希 / デジタルサーカス(株) 副団⻑⾧長CTO
と も き
@tomzoh

とむぞう
iOS Swift
Coming
Soon
開発系趣味
その他趣味
iOSアプリ開発, Web開発 趣味のプログラム
レンタルカートレース, 電⼦子⼯工作(mbed), …
デジタルサーカス(株)
・ Webサイト受託開発
・ スマホアプリ受託開発
・ ⾃自社サービス
(PHP, Drupal, CakePHP)
(iOS, Android)
(http://appbuilder.jp)
Twitter: @tomzoh
Twitter: @tomzoh Yo: TOMZOH Beer?!: TOMZOH
今⽇日のテーマ:
Swiftの
「Optional型。」
Swift の String型
Swift の String型には nil は⼊入らない。
メソッドの返値とかでnilを返したいことってちょくちょくある…。
Swift の String型には nil は⼊入らない。
「nilを⼊入れたい場合、?を付ける。」
メソッドの返値とかでnilを返したいことってちょくちょくある…。
Swift の String型には nil は⼊入らない。
「nilを⼊入れたい場合、?を付ける。」
メソッドの返値とかでnilを返したいことってちょくちょくある…。
nilを⼊入れたい場合、Optional<String>型を使う。
nilを⼊入れたい場合、Optional<String>型を使う。
String?は…
nilを⼊入れたい場合、Optional<String>型を使う。
String?は…
Optional<String>の省省略略形!
変数にnilが⼊入った!
じゃあ、その変数を使おう!
Optional<String>型はそのままではString型として使えない
元の型(String型)として使うために…
Optional<String>型はそのままではString型として使えない
元の型(String型)として使うために…
_⼈人⼈人⼈人⼈人⼈人⼈人⼈人⼈人⼈人⼈人⼈人_
> アンラップする!! <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
アンラップ
・ Optional型で「ラップした」変数を元の型として使える様にす
る処理理。
・ ⽅方法は4つある。
・ Forced Unwrapping
・ Optional Chaining
・ Optional Binding
・ Implicitly Unwrapped Optional
アンラップの⽅方法
・ Forced Unwrapping
・ Optional Chaining
・ Optional Binding
・ Implicitly Unwrapped Optional
Forced Unwrapping
・ 強制的にアンラップして元の型を取り出す。
・ 変数名の後ろに「 ! 」を付ける。
・ Forced Unwrappingしたものは元の型になっている。
・ nilに対してForced Unwrappingすると実⾏行行時エラーになる。
アンラップの⽅方法
・ Forced Unwrapping
強制的にアンラップして元の型を取り出す。
・ Optional Chaining
・ Optional Binding
・ Implicitly Unwrapped Optional
アンラップの⽅方法
・ Forced Unwrapping
強制的にアンラップして元の型を取り出す。
・ Optional Chaining
・ Optional Binding
・ Implicitly Unwrapped Optional
Optional Chaining
・ 元の型のメソッドや添字を使える様にする。
・ 変数名の後ろに「 ? 」を付ける。
・ 結果もOptional型で返される。(Chaining)
・ 変数がnilの場合そのアクセスは無視される。
Optional Chaining
・ Optional ChainingしたものはやっぱりOptional型。
・ 結果もOptional型で返される。(Chaining)
・ 変数がnilの場合そのアクセスは無視される。
アンラップの⽅方法
・ Forced Unwrapping
強制的にアンラップして元の型を取り出す。
・ Optional Chaining
元の型のメソッドや添字を使える様にする。
・ Optional Binding
・ Implicitly Unwrapped Optional
アンラップの⽅方法
・ Forced Unwrapping
強制的にアンラップして元の型を取り出す。
・ Optional Chaining
元の型のメソッドや添字を使える様にする。
・ Optional Binding
・ Implicitly Unwrapped Optional
Optional Binding
・ let でも var でもOK。
・ unwrapped は String 型。
・ str が nil の場合は if の条件式の評価が false になる。
・ 頻出構⽂文。
・ nilチェックをしてnilでなければ元の型を取り出す。
アンラップの⽅方法
・ Forced Unwrapping
強制的にアンラップして元の型を取り出す。
・ Optional Chaining
元の型のメソッドや添字を使える様にする。
・ Optional Binding
nilチェックをしてnilでなければ元の型を取り出す。
・ Implicitly Unwrapped Optional
アンラップの⽅方法
・ Forced Unwrapping
強制的にアンラップして元の型を取り出す。
・ Optional Chaining
元の型のメソッドや添字を使える様にする。
・ Optional Binding
nilチェックをしてnilでなければ元の型を取り出す。
・ Implicitly Unwrapped Optional
・ このアンラップはForced Unwrapping。
・ nilの時に使⽤用されると実⾏行行時エラーになる。(=⾃自動的にアンラップ)
・ 取扱注意。
Implicitly Unwrapped Optional
・ Implicitly Unwrapped Optional 型で宣⾔言する。
・ 使⽤用時に⾃自動的にアンラップされて元の型になる。
アンラップの⽅方法
・ Forced Unwrapping
・ 強制的にアンラップして元の型を取り出す。
・ Optional Chaining
・ 元の型のメソッドや添字を使える様にする。
・ Optional Binding
・ nilチェックをしてnilでなければ元の型を取り出す。
・ Implicitly Unwrapped Optional
使⽤用時に⾃自動的にアンラップされて元の型になる。
ところで…
Implicitly Unwrapped Optional
・ Implicitly Unwrapped Optional 型で宣⾔言する。
・ 使⽤用時に⾃自動的にアンラップされて元の型になる。
・ このアンラップはForced Unwrapping。
・ nilの時に使⽤用されると実⾏行行時エラーになる。(=⾃自動的にアンラップ)
・ 取扱注意。
Implicitly Unwrapped Optional
・ Implicitly Unwrapped Optional 型で宣⾔言する。
・ 使⽤用時に⾃自動的にアンラップされて元の型になる。
・ このアンラップはForced Unwrapping。
・ nilの時に使⽤用されると実⾏行行時エラーになる。(=⾃自動的にアンラップ)
・ 取扱注意。
Implicitly Unwrapped Optional
・ Implicitly Unwrapped Optional 型で宣⾔言する。
・ 使⽤用時に⾃自動的にアンラップされて元の型になる。
_⼈人⼈人⼈人⼈人⼈人⼈人⼈人⼈人⼈人⼈人⼈人_
>  ⻑⾧長い!!  <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
省省略略形
Optional型 - シンタックスシュガー
・ 省省略略形、シンタックスシュガー。
Optional型 - シンタックスシュガー
・ 省省略略形、シンタックスシュガー。
・ アンラップに使う「 ? 」や「 ! 」とは別物。混同すると⼤大混乱。
・ 世の中の混乱は⼤大抵この混同から発⽣生していると思う。
・ ⾃自分もそうだった。
・ 「 ? 」や「 ! 」を⾒見見たらどっちなのか考えて読もう。
まとめ
・ SwiftのString型(やInt型やBool型や…)はnilを値として取らない。
・ nilを扱いたい場合Optional型やImplicitly Unwrapped Optional型
を使う。
・ 省省略略形として元の型の名前の後ろに「 ? 」や「 ! 」を付けて表現できる。
・ Optional型を元の型として使うためには「アンラップ」する。
・ アンラップは末尾に「 ? 」「 ! 」を付けてその⽅方法を表現する。
・ Optional型の省省略略形としての「 ? 」「 ! 」とアンラップ⽅方法を表現する
「 ? 」「 ! 」は別物。
Optional Ready
Happy Swifting
?
!
ありがとうございました。
@tomzoh

オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版