Optional型について学習したので、アウトプットしていきます
※以下の内容は、学習内容のアウトプット用のため、誤りがある場合があります。予めご了承ください
Optional(Wrapped)型とは?
Optional(Wrapped)型を一言でいうと、値があるか空かのいずれを表す型です。
基本的に、swiftの変数や定数は基本的にnilを許容しないのですが、そのnilを用いる場合には
Optional(Wrapped)型を使用します!
例えば
1.var n: Int
2.
3.print(n)//エラー
上記のように、存在していない値を出力しようとするとエラーが起こります。
そこで登場するのが、Optional(Wrapped)型です
1.var n: Optional<Int>
2.
3.print(n)//nil
上記のように、Optional(Wrapped)型を使うとエラーにならず、nilが出力がされます。
このように、「『Optional型』でデータをラップしておくと値が存在しない場合は『nil』を返すようになる」という挙動になるためエラーを回避することができます。これが『Optional型』の基本的な使い方になります.
Optional(Wrapped)型のアンラップとは?
Optional(Wrapped)型は値を持っていない可能性があるため、Wrapped型の変数や定数と同じように扱うことができない。
例えば、Int?型どうしの四則演算はエラーになります。
1.let a: Int? = 1
2.let b: Int? = 1
3.a+b//エラー
このエラーを回避するために、アンラップを行います。
アンラップの方法は以下の3つです。
○ オプショナルバインディング
○ ??演算子
○ 強制アンラップ
一つずつ深堀りしていきましょう!
オプショナルバインディングとは?
if let 定数名 = Optional(Wrapped)型{
//値が存在する場合に実行される文
}
上記の文のように、if-let文を用いてWrapped型の値をもつ場合は{}の文が実行されます。
次の例では、定数Aに値が存在するため、String型の定数aに値が代入され、実行文が実行されます!
1.let A: Optional("1") //Int型
2.if let A {
print(type(of:1))
//実行結果:Int
}
??演算子とは?
次の例では、??演算子の左辺にString型の値"a"を持った、String型?の定数optionalStringを右辺にString型の値"b"を指定し、結果として左辺の値"a"を取得しています。
1.let optionalString:String? = "a"
2.if String = optionalString ?? "b"
//実行結果 a
強制アンラップとは?
強制アンラップは、Optional(Wrapped)型からWrapped型の値を強制的に取り出す方法です。
強制アンラップを行うには、!演算子を使用します。
上記では、Wrapped型の変数や定数と同じように扱うことができないと述べましたが、強制アンラップ使うことによって取り出すことができます。
let a : Int? = 1
let b : Int? = 1
a!+b! = //2