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

Preview:

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チェックをしてから使用しましょう

ご清聴ありがとうございました