Upload
motoki-narita
View
838
Download
0
Embed Size (px)
DESCRIPTION
第1回 Swift勉強会@ネクストで、OptionalというSwiftの言語仕様について発表した際のスライドです。
Citation preview
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チェックをしてから使用しましょう
ご清聴ありがとうございました