SlideShare a Scribd company logo
1 of 27
Download to read offline
Optionalの使い方
株式会社ネクスト 成田元輝
第1回 Swift勉強会@ネクスト
自己紹介
• 成田元輝 @mo_to_44
• 個人でiPhoneアプリを開発
• 2014年5月 株式会社ネクスト入社iOS開
発グループで働き始める HOME Sアプリ
担当しています
• まさかのSwift発表に困惑した1週間
Optionalとは
The Swift Programming Language
“Swift is a type safe language”
Optionalとは
The Swift Programming Language
“Optionals are an example of
the fact that Swift is a type
safe language”
Optionalとは
Swiftでは通常の型にnilの代入はできない
var someValue: Int = nil
Optionalとは
Swiftでは通常の型にnilの代入はできない
var someValue: Int = nil
Optionalとは
Optionalを指定するとnilの代入が可能になる
var someValue: Int? = nil
Optionalとは
Optionalを指定するとnilの代入が可能になる
var someValue: Int? = nil
Optionalとは
Optionalを指定するとnilの代入が可能になる
var someValue: Int? //nil!
!
※Optional型に初期値を設定しない場合、自動的にnilになる
Optionalとは
値が入らないかもしれない=nilとなる可能性のあ
る変数は、宣言時に”?”をつけてOptional型とする
!
Optionalは値が入るかもしれないし、入らないか
もしれない、“オプション”の変数に使用する
!
Optionalとは
Forced Unwrapping
Optional型の変数を通常の型の変数に代入
することは可能?
Forced Unwrapping
var number: Int? = 42!
var newNumber: Int = number
Optional型の変数を通常の型の変数に代入
することは可能?
Forced Unwrapping
var number: Int? = 42!
var newNumber: Int = number
Optional型の変数を通常の型の変数に代入
することは可能?
Forced Unwrapping
var number: Int? = 42!
var newNumber: Int = number
Optional型の変数にはnilが入っている可能性がある
Forced Unwrapping
Optional型のUnwrapping=解除を行う
Optional型の変数に”!”をつける
var number: Int? = 42!
var newNumber: Int = number!
Optional型のUnwrapping=解除を行う
Optional型の変数に”!”をつける
Forced Unwrapping
var number: Int? = 42!
var newNumber: Int = number!
ただし!
Forced Unwrapping
var number: Int? = nil!
var newNumber: Int = number!
Unwrappingした変数がnilだった場合、
ランタイムエラーとなる
Forced Unwrapping
var number: Int? = nil!
var newNumber: Int = number!
Unwrappingした変数がnilだった場合、
ランタイムエラーとなる
コンパイラによる型チェックが行われず、せっかくの
Type SafetyなSwiftの言語仕様を台無しにしてしまう
Forced Unwrapping
var number: Int? = nil!
var newNumber: Int!
!
if number {!
newNumber = number!!
}else{!
println("There isn't value")!
}
“!”を使ってUnwrappingする際は、if文でnilの
チェックをしましょう
Optional Binding
Optional Binding
var number: Int? = 42!
var newNumber: Int!
!
if let validNumber = number {!
newNumber = validNumber!
}else{!
println("There isn't value")!
}
nilチェックを行いながら、一時的な変数、定数を使用する
Optional Binding
var number: Int? = 42!
var newNumber: Int!
!
if let validNumber = number {!
newNumber = validNumber!
}else{!
println("There isn't value")!
}
nilチェックを行いながら、一時的な変数、定数を使用する
Optional Binding
var number: Int? = nil!
var newNumber: Int!
!
if let validNumber = number {!
newNumber = validNumber!
}else{!
println("There isn't value")!
}
nilチェックを行いながら、一時的な変数、定数を使用する
まとめ
まとめ
• 値が入らない可能性のある変数は”?”をつけて
Optionalにする必要がある
• ”!”を使ったForced Unwrappingはコンパイラに
よるチェックが効かなくなり、さらにランタイム
エラーになる可能性もあるのでなるべく使わない
方が良さそう
• Optionalな変数はif文+”!”、あるいはOptional
Bindingでnilチェックをしてから使用しましょう
ご清聴ありがとうございました

More Related Content

Similar to Optionalの使い方 第1回 Swift勉強会@ネクスト

できることから始めるOss活動
できることから始めるOss活動できることから始めるOss活動
できることから始めるOss活動Motoki Narita
 
Swiftだめ自慢Beta5
Swiftだめ自慢Beta5Swiftだめ自慢Beta5
Swiftだめ自慢Beta5今城 善矩
 
アドベント2015ios基礎
アドベント2015ios基礎アドベント2015ios基礎
アドベント2015ios基礎ppengotsu Name
 
iOSローカライズことはじめ
iOSローカライズことはじめiOSローカライズことはじめ
iOSローカライズことはじめ俊輔 嶺村
 
20140822 Swift 勉強会 vol.3 - はぢめての Swift
20140822 Swift 勉強会 vol.3 - はぢめての Swift20140822 Swift 勉強会 vol.3 - はぢめての Swift
20140822 Swift 勉強会 vol.3 - はぢめての SwiftMori Tetsuya
 

Similar to Optionalの使い方 第1回 Swift勉強会@ネクスト (6)

できることから始めるOss活動
できることから始めるOss活動できることから始めるOss活動
できることから始めるOss活動
 
Study Swift
Study Swift Study Swift
Study Swift
 
Swiftだめ自慢Beta5
Swiftだめ自慢Beta5Swiftだめ自慢Beta5
Swiftだめ自慢Beta5
 
アドベント2015ios基礎
アドベント2015ios基礎アドベント2015ios基礎
アドベント2015ios基礎
 
iOSローカライズことはじめ
iOSローカライズことはじめiOSローカライズことはじめ
iOSローカライズことはじめ
 
20140822 Swift 勉強会 vol.3 - はぢめての Swift
20140822 Swift 勉強会 vol.3 - はぢめての Swift20140822 Swift 勉強会 vol.3 - はぢめての Swift
20140822 Swift 勉強会 vol.3 - はぢめての Swift
 

More from Motoki Narita

Type safety WCSession
Type safety WCSessionType safety WCSession
Type safety WCSessionMotoki Narita
 
NullabilityとジェネリクスでswiftからObjective-Cのコードを使いやすくする
NullabilityとジェネリクスでswiftからObjective-Cのコードを使いやすくするNullabilityとジェネリクスでswiftからObjective-Cのコードを使いやすくする
NullabilityとジェネリクスでswiftからObjective-Cのコードを使いやすくするMotoki Narita
 
Swift3.0に向けて enumerateを使い始めよう
Swift3.0に向けて enumerateを使い始めようSwift3.0に向けて enumerateを使い始めよう
Swift3.0に向けて enumerateを使い始めようMotoki Narita
 
Swift bondさわってみた
Swift bondさわってみたSwift bondさわってみた
Swift bondさわってみたMotoki Narita
 
watchOS1 to watchOS2
watchOS1 to watchOS2watchOS1 to watchOS2
watchOS1 to watchOS2Motoki Narita
 

More from Motoki Narita (11)

Type safety WCSession
Type safety WCSessionType safety WCSession
Type safety WCSession
 
NullabilityとジェネリクスでswiftからObjective-Cのコードを使いやすくする
NullabilityとジェネリクスでswiftからObjective-Cのコードを使いやすくするNullabilityとジェネリクスでswiftからObjective-Cのコードを使いやすくする
NullabilityとジェネリクスでswiftからObjective-Cのコードを使いやすくする
 
Enumerate
EnumerateEnumerate
Enumerate
 
Swift3.0に向けて enumerateを使い始めよう
Swift3.0に向けて enumerateを使い始めようSwift3.0に向けて enumerateを使い始めよう
Swift3.0に向けて enumerateを使い始めよう
 
About Swift-Clean
About Swift-CleanAbout Swift-Clean
About Swift-Clean
 
Swift bondさわってみた
Swift bondさわってみたSwift bondさわってみた
Swift bondさわってみた
 
watchOS2 tips
watchOS2 tipswatchOS2 tips
watchOS2 tips
 
Xcode tips
Xcode tipsXcode tips
Xcode tips
 
watchOS1 to watchOS2
watchOS1 to watchOS2watchOS1 to watchOS2
watchOS1 to watchOS2
 
Complication
ComplicationComplication
Complication
 
Watch connectivity
Watch connectivityWatch connectivity
Watch connectivity
 

Optionalの使い方 第1回 Swift勉強会@ネクスト