16
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Swift さくっと確認したい基礎文法 [Optional(オプショナル) その1]

Last updated at Posted at 2015-04-12

今回はボリュームが多いので、2回に分けて書いていきます。
・その1:オプショナルの概要
・その2:「オプショナルバインディング」と「オプショナルチェインニング」

Optional(オプショナル)

Swiftの定数、変数はnil(値なし。java等でいうnull)を代入できません。
これをOptional型でラップすることでnilを入れることができるようになります。

イメージが浮かばないと思うので
さっそく例を見ていきましょう。

通常はnilを代入できないため、下記の場合、エラーになります。

swift
var myName:String = "yuinchirn" // "yuinchirn"
myName = nil // エラー

nilを代入したい場合は、
myName:Stirng?のように型の後ろに?を付けます。

swift
var myName:String? = "yuinchirn" // Optional("yuinchirn")
myName = nil // OK

この?が何なのかというと、

Optinal<String>という形でString型をOptional型という型でラッピングするということをやっています。
つまり下記と同じ意味です。

swift
var myName:Optional<String> = "yuinchirn" // Optional("yuinchirn")
myName = nil

これによってmyNameはOptinal型、オプショナルバリューになります。
オプショナルバリューの状態では、元の型のメソッド操作や値の操作ができません。

swift
var myName:String? = "yuinchirn"
var newMyName = "new_" + myName // myNameがオプショナルバリューの状態なのでエラーになる。

これでは使い物にならないので、
元の型のメソッド操作や値の操作をしたい場合は、
一時的にオプショナルバリューをアンラップし元の型に戻してあげます。

その場合は変数名に!をつけます。
今回の場合は"new_" + myName!といった感じです。

swift
var myName:String? = "yuinchirn"
myName = nil
var newMyName = "new_" + myName! // OK

オプショナルバリューがnilだった場合の初期値設定のやり方

オプショナルバリューがnilだった場合に
他の値を入れて後続の処理を行いたいというシチュエーションがあると思います。

その場合に使うのが、??です。

swift
var num:Int? // nil
let price = 500 * (num ?? 10) // numがnilなので10で計算される。
println(price) // 5000

上記のように([オプショナルバリュー]?? 値)にすることで
[オプショナルバリュー]がnilの場合、[値]に設定された値が利用されます。
※但し、上記の場合にはnumに10は代入されません。

swift
var num:Int? // nil
num = 5
let price = 500 * (num ?? 10) // numが5なので5で計算される。
println(price) // 2500

もちろん上記のように、nilでなければその値が使われます。

オプショナルを使ったスマートなnilチェックの方法などを紹介した下記も合わせてご覧ください。
Swift さくっと確認したい基礎文法 [Optional(オプショナル) その2]

16
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?