SlideShare a Scribd company logo
オプショナル型。 
なんとなく付ける ! ? 撲滅 
デジタルサーカス(株)⻑⾧長⾕谷川智希
⾃自⼰己紹介 
ともき 
・⻑⾧長⾕谷川智希 / デジタルサーカス(株) 副団⻑⾧長CTO 
! 
・開発系趣味: iOSアプリ開発, Web開発 
・その他趣味: レンタルカート, 電⼦子⼯工作(mbed), … 
Twitter Yo Beer?! 
@tomzoh TOMZOH TOMZOH
⾃自⼰己紹介 
ともき 
・⻑⾧長⾕谷川智希 / デジタルサーカス(株) 副団⻑⾧長CTO 
新! 
卒13年年⽬目 
・開発系趣味: iOSアプリ開発, Web開発 
・その他趣味: レンタルカート, 電⼦子⼯工作(mbed), … 
Twitter Yo Beer?! 
@tomzoh TOMZOH TOMZOH
著書 
2012 2013 2014 
iOS 
執筆中 
Twitter: @tomzoh Yo: TOMZOH Beer?!: TOMZOH
デジタルサーカス(株) 
・Webサイト受託開発 
・スマホアプリ受託開発 
・⾃自社サービス 
(PHP, CakePHP, Drupal) 
(iOS, Android) 
(http://appbuilder.jp) 
Twitter: @tomzoh Yo: TOMZOH Beer?!: 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 
・強制的にアンラップして元の型を取り出す。 
・変数名の後ろに「 ! 」を付ける。 
・Forced Unwrappingしたものは元の型になっている。 
・nilに対してForced Unwrappingすると実⾏行行時エラーになる。
アンラップの⽅方法 
・Forced Unwrapping 
強制的にアンラップして元の型を取り出す。 
・Optional Chaining 
! 
・Optional Binding 
! 
・Implicitly Unwrapped Optional
Optional Chaining 
・元の型のメソッドや添字を使える様にする。 
・変数名の後ろに「 ? 」を付ける。 
・結果もOptional型で返される。(Chaining) 
・変数がnilの場合そのアクセスは無視される。
Optional Chaining 
・結果もOptional型で返される。(Chaining) 
・変数がnilの場合そのアクセスは無視される。 
・Optional ChainingしたものはやっぱりOptional型。
アンラップの⽅方法 
・Forced Unwrapping 
強制的にアンラップして元の型を取り出す。 
・Optional Chaining 
元の型のメソッドや添字を使える様にする。 
・Optional Binding 
! 
・Implicitly Unwrapped Optional
Optional Binding 
・nilチェックをしてnilでなければ元の型を取り出す。 
・let でも var でもOK。 
・unwrapped は String 型。 
・str が nil の場合は if の条件式の評価が false になる。 
・頻出構⽂文。
アンラップの⽅方法 
・Forced Unwrapping 
強制的にアンラップして元の型を取り出す。 
・Optional Chaining 
元の型のメソッドや添字を使える様にする。 
・Optional Binding 
nilチェックをしてnilでなければ元の型を取り出す。 
・Implicitly Unwrapped Optional
Implicitly Unwrapped Optional 
・Implicitly Unwrapped Optional 型で宣⾔言する。 
・使⽤用時に⾃自動的にアンラップされて元の型になる。 
・このアンラップはForced Unwrapping。 
・nilの時に使⽤用されると実⾏行行時エラーになる。(=⾃自動的にアンラップ) 
・取扱注意。
アンラップの⽅方法 
・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型の省省略略形としての「 ? 」「 ! 」とアンラップ⽅方法を表現する 
「 ? 」「 ! 」は別物。
オプショナル型 完全理理解!
Happy Swifting!
ありがとうございました。 
@tomzoh

More Related Content

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