1
1

More than 3 years have passed since last update.

Optional(Wrapped)型を理解しよう!

Posted at

Optional型について学習したので、アウトプットしていきます
※以下の内容は、学習内容のアウトプット用のため、誤りがある場合があります。予めご了承ください

Optional(Wrapped)型とは?

Optional(Wrapped)型を一言でいうと、値があるか空かのいずれを表す型です。
基本的に、swiftの変数や定数は基本的にnilを許容しないのですが、そのnilを用いる場合には
Optional(Wrapped)型を使用します!

例えば

qiita.rbvar
1.var n: Int
2.
3.print(n)//エラー

上記のように、存在していない値を出力しようとするとエラーが起こります。
そこで登場するのが、Optional(Wrapped)型です

qiita.rbvar
1.var n: Optional<Int>
2.
3.print(n)//nil

上記のように、Optional(Wrapped)型を使うとエラーにならず、nilが出力がされます。

このように、「『Optional型』でデータをラップしておくと値が存在しない場合は『nil』を返すようになる」という挙動になるためエラーを回避することができます。これが『Optional型』の基本的な使い方になります.

Optional(Wrapped)型のアンラップとは?

Optional(Wrapped)型は値を持っていない可能性があるため、Wrapped型の変数や定数と同じように扱うことができない。
例えば、Int?型どうしの四則演算はエラーになります。

qiita.rbvar
1.let a: Int? = 1
2.let b: Int? = 1
3.a+b//エラー

このエラーを回避するために、アンラップを行います。
アンラップの方法は以下の3つです。

○ オプショナルバインディング
○ ??演算子
○ 強制アンラップ

一つずつ深堀りしていきましょう!

オプショナルバインディングとは?

qiita.rbvar
if let 定数名 = Optional(Wrapped){

//値が存在する場合に実行される文

}

上記の文のように、if-let文を用いてWrapped型の値をもつ場合は{}の文が実行されます。
次の例では、定数Aに値が存在するため、String型の定数aに値が代入され、実行文が実行されます!

qiita.rbvar
1.let A: Optional("1") //Int型
2.if let A {
print(type(of:1))

//実行結果:Int

}

 ??演算子とは?

次の例では、??演算子の左辺にString型の値"a"を持った、String型?の定数optionalStringを右辺にString型の値"b"を指定し、結果として左辺の値"a"を取得しています。

qiita.rbvar
1.let optionalString:String? = "a"
2.if String = optionalString ?? "b"

//実行結果 a

 強制アンラップとは?

強制アンラップは、Optional(Wrapped)型からWrapped型の値を強制的に取り出す方法です。
強制アンラップを行うには、!演算子を使用します。
上記では、Wrapped型の変数や定数と同じように扱うことができないと述べましたが、強制アンラップ使うことによって取り出すことができます。

qiita.rbvar
let a : Int? = 1
let b : Int? = 1
a!+b! = //2
1
1
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
1
1