SlideShare une entreprise Scribd logo
1  sur  38
Télécharger pour lire hors ligne
オプショナル型。 
なんとなく付ける ! ? 撲滅 
デジタルサーカス(株)⻑⾧長⾕谷川智希
⾃自⼰己紹介 
ともき 
・⻑⾧長⾕谷川智希 / デジタルサーカス(株) 副団⻑⾧長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

Contenu connexe

En vedette

Xcode 6の新機能
Xcode 6の新機能Xcode 6の新機能
Xcode 6の新機能Shingo Sato
 
iOS8勉強会@Yahoo! JAPAN "Document Provider"
iOS8勉強会@Yahoo! JAPAN "Document Provider"iOS8勉強会@Yahoo! JAPAN "Document Provider"
iOS8勉強会@Yahoo! JAPAN "Document Provider"智也 大西
 
Ios8yahoo swift-json
Ios8yahoo swift-jsonIos8yahoo swift-json
Ios8yahoo swift-jsondankogai
 
SwiftでSioriを開発した体験記
SwiftでSioriを開発した体験記SwiftでSioriを開発した体験記
SwiftでSioriを開発した体験記yohei sugigami
 
大人のHomekit
大人のHomekit大人のHomekit
大人のHomekitKen Haneda
 
虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数Taketo Sano
 
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahooもしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahooniwatako
 

En vedette (8)

Xcode 6の新機能
Xcode 6の新機能Xcode 6の新機能
Xcode 6の新機能
 
iOS8勉強会@Yahoo! JAPAN "Document Provider"
iOS8勉強会@Yahoo! JAPAN "Document Provider"iOS8勉強会@Yahoo! JAPAN "Document Provider"
iOS8勉強会@Yahoo! JAPAN "Document Provider"
 
Ios8yahoo swift-json
Ios8yahoo swift-jsonIos8yahoo swift-json
Ios8yahoo swift-json
 
SwiftでSioriを開発した体験記
SwiftでSioriを開発した体験記SwiftでSioriを開発した体験記
SwiftでSioriを開発した体験記
 
大人のHomekit
大人のHomekit大人のHomekit
大人のHomekit
 
虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数
 
既存アプリのiOS8対応 #ios8yahoo
既存アプリのiOS8対応 #ios8yahoo既存アプリのiOS8対応 #ios8yahoo
既存アプリのiOS8対応 #ios8yahoo
 
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahooもしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
 

Plus de Tomoki Hasegawa

Reading php terminal-gameboy-emulator
Reading php terminal-gameboy-emulatorReading php terminal-gameboy-emulator
Reading php terminal-gameboy-emulatorTomoki Hasegawa
 
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMSDrupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMSTomoki Hasegawa
 
とある受託ベンダの開発環境
とある受託ベンダの開発環境とある受託ベンダの開発環境
とある受託ベンダの開発環境Tomoki Hasegawa
 
iOS Developers Conference Japan 2016
iOS Developers Conference Japan 2016iOS Developers Conference Japan 2016
iOS Developers Conference Japan 2016Tomoki Hasegawa
 
エンジニアのお祭り
エンジニアのお祭りエンジニアのお祭り
エンジニアのお祭りTomoki Hasegawa
 
勉強会のこちら側とあちら側
勉強会のこちら側とあちら側勉強会のこちら側とあちら側
勉強会のこちら側とあちら側Tomoki Hasegawa
 
tvOSでWebSocketを使う
tvOSでWebSocketを使うtvOSでWebSocketを使う
tvOSでWebSocketを使うTomoki Hasegawa
 
「これを買っている人はこれも買っています」実装してみた PHP side
「これを買っている人はこれも買っています」実装してみた PHP side「これを買っている人はこれも買っています」実装してみた PHP side
「これを買っている人はこれも買っています」実装してみた PHP sideTomoki Hasegawa
 
tvOSネイティブアプリを作る
tvOSネイティブアプリを作るtvOSネイティブアプリを作る
tvOSネイティブアプリを作るTomoki Hasegawa
 
「これを買っている人はこれも買っています」実装してみた
「これを買っている人はこれも買っています」実装してみた「これを買っている人はこれも買っています」実装してみた
「これを買っている人はこれも買っています」実装してみたTomoki Hasegawa
 
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMSDrupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMSTomoki Hasegawa
 
TestFlightみたいなのを自作する
TestFlightみたいなのを自作するTestFlightみたいなのを自作する
TestFlightみたいなのを自作するTomoki Hasegawa
 
PHPでスマホアプリにプッシュ通知する
PHPでスマホアプリにプッシュ通知するPHPでスマホアプリにプッシュ通知する
PHPでスマホアプリにプッシュ通知するTomoki Hasegawa
 
PUSH通知証明書作成ツールを作った
PUSH通知証明書作成ツールを作ったPUSH通知証明書作成ツールを作った
PUSH通知証明書作成ツールを作ったTomoki Hasegawa
 
PHPカンファレンス福岡に 行ってきた
PHPカンファレンス福岡に 行ってきたPHPカンファレンス福岡に 行ってきた
PHPカンファレンス福岡に 行ってきたTomoki Hasegawa
 
CakePHP3ウォークスルー
CakePHP3ウォークスルーCakePHP3ウォークスルー
CakePHP3ウォークスルーTomoki Hasegawa
 
はじめてのiOSアプリ開発 Swift対応版
はじめてのiOSアプリ開発 Swift対応版はじめてのiOSアプリ開発 Swift対応版
はじめてのiOSアプリ開発 Swift対応版Tomoki Hasegawa
 
AppStore申請を一式まるっと自動化する
AppStore申請を一式まるっと自動化するAppStore申請を一式まるっと自動化する
AppStore申請を一式まるっと自動化するTomoki Hasegawa
 
PHPerのためのSwift入門
PHPerのためのSwift入門PHPerのためのSwift入門
PHPerのためのSwift入門Tomoki Hasegawa
 

Plus de Tomoki Hasegawa (20)

Reading php terminal-gameboy-emulator
Reading php terminal-gameboy-emulatorReading php terminal-gameboy-emulator
Reading php terminal-gameboy-emulator
 
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMSDrupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
 
とある受託ベンダの開発環境
とある受託ベンダの開発環境とある受託ベンダの開発環境
とある受託ベンダの開発環境
 
iOS Developers Conference Japan 2016
iOS Developers Conference Japan 2016iOS Developers Conference Japan 2016
iOS Developers Conference Japan 2016
 
エンジニアのお祭り
エンジニアのお祭りエンジニアのお祭り
エンジニアのお祭り
 
勉強会のこちら側とあちら側
勉強会のこちら側とあちら側勉強会のこちら側とあちら側
勉強会のこちら側とあちら側
 
tvOSでWebSocketを使う
tvOSでWebSocketを使うtvOSでWebSocketを使う
tvOSでWebSocketを使う
 
「これを買っている人はこれも買っています」実装してみた PHP side
「これを買っている人はこれも買っています」実装してみた PHP side「これを買っている人はこれも買っています」実装してみた PHP side
「これを買っている人はこれも買っています」実装してみた PHP side
 
tvOSネイティブアプリを作る
tvOSネイティブアプリを作るtvOSネイティブアプリを作る
tvOSネイティブアプリを作る
 
「これを買っている人はこれも買っています」実装してみた
「これを買っている人はこれも買っています」実装してみた「これを買っている人はこれも買っています」実装してみた
「これを買っている人はこれも買っています」実装してみた
 
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMSDrupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
 
TestFlightみたいなのを自作する
TestFlightみたいなのを自作するTestFlightみたいなのを自作する
TestFlightみたいなのを自作する
 
PHPでスマホアプリにプッシュ通知する
PHPでスマホアプリにプッシュ通知するPHPでスマホアプリにプッシュ通知する
PHPでスマホアプリにプッシュ通知する
 
Stargazer Meetup #1
Stargazer Meetup #1Stargazer Meetup #1
Stargazer Meetup #1
 
PUSH通知証明書作成ツールを作った
PUSH通知証明書作成ツールを作ったPUSH通知証明書作成ツールを作った
PUSH通知証明書作成ツールを作った
 
PHPカンファレンス福岡に 行ってきた
PHPカンファレンス福岡に 行ってきたPHPカンファレンス福岡に 行ってきた
PHPカンファレンス福岡に 行ってきた
 
CakePHP3ウォークスルー
CakePHP3ウォークスルーCakePHP3ウォークスルー
CakePHP3ウォークスルー
 
はじめてのiOSアプリ開発 Swift対応版
はじめてのiOSアプリ開発 Swift対応版はじめてのiOSアプリ開発 Swift対応版
はじめてのiOSアプリ開発 Swift対応版
 
AppStore申請を一式まるっと自動化する
AppStore申請を一式まるっと自動化するAppStore申請を一式まるっと自動化する
AppStore申請を一式まるっと自動化する
 
PHPerのためのSwift入門
PHPerのためのSwift入門PHPerのためのSwift入門
PHPerのためのSwift入門
 

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