LoginSignup
56
45

More than 5 years have passed since last update.

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

Posted at

オプショナルデータ型

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)チェックを行う。

56
45
1

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
56
45