Posted at

【swift】変数によく付いている「!」や「?」(ビックリマーク・クエスチョンマーク)の説明

More than 3 years have passed since last update.


オプショナルデータ型

var strA:String?

var intA:Int!

swiftをやっていると上のような引数の宣言を見たことがあると思います。

他の言語ではあんまり見ない仕様なので、私自身困惑をしました。

この解説をしていきたいと思います。

swiftだと、データを用いる際「オプショナル」という情報を持たすことができます。


オプショナルとは

・"変数にnul(null)が入っているかもしれないよ?"

・"予想しているデータ型と違うかもよ?"

と言った情報のことです。


?(クエスチョンマーク)の意味

では実際にどのようなものなのかコードを見てみようと思います。

var strA:String?

strA = nil //問題なく実行できます

var strB:String
strB = nil //エラーが出る

つまり、?をつけていないと「絶対にnil(null)は入れたらダメだからね」という意味になります。

反対に、?をつけていると「nil入っているかもしれないけどいいんじゃない?」という意味になります。

デフォルトでは、nilは許容しないとおぼえていたほうがいいですね。


!(ビックリマーク)の意味

以下の様なコードを見ることがあります。

var strA:String?

strA!

この!(ビックリマーク)はアップルのマニュアル『The Swift Programming Language』で”Forced Unwrapping”と説明されており”Forced Unwrapping”とは、直訳すれば”強制的に包装を解く、あける”といった意味になるでしょう。

変数を強制的に開封し、そこに爆弾であるnul(null)が含まれていた場合エラーが起きるということになります。

以下は具体的なコードです。

var strA:String?

strA = "不発弾"
strA! //爆発はしない(エラーはでない)

var strB:String?
strB = nil
strB! //爆発する(エラー)

ということになります。


補足

上記の例のコードはすべてString型ですがInt型も同様にnil(null)の確認を行います。


まとめ

・基本的に変数に?(クエスチョンマーク)がついていればエラーにならない

・nilが入っているか確かめたいのであれば!(ビックリマーク)を使用し、nil(null)チェックを行う。