オプショナル型をアンラップする必要性
オプショナル型のデータを利用するときはアンラップという処理をする必要があります。
- アンラップしないと演算することができません。
- Int?とIntは別物です。
- オプショナルのアンラップはInt?をIntに戻す処理のことです。
オプショナル型をアンラップする
オプショナル型をアンラップする方法
- ??演算子
- !演算子
- if let文
??演算子(nil結合演算子)
オプショナルデータ(アンラップ成功時) ?? デフォルト値(アンラップ失敗時、nilだったとき)
var optGreet:String? = "HW"
var greet = optGreet ?? "Hello"
print(greet)
- 1行目でoptGreetがオプショナル型で宣言されています。
- 2行目の〇〇??△△でアンラップが行われました。
- print(greet)でアンラップされたHWが表示されます。
値がnilの場合
var optGreet:String? = nil
var greet = optGreet ?? "Hello"
print(greet)
- 1行目でoptGreetがオプショナル型で宣言されています。
- 2行目の〇〇??△△でアンラップが行われました。
- この場合、optGreetの値はnilだったため”Hello”が選択されます。
- print(greet)でHelloが表示されます。
!演算子を使用する
!演算子
- !演算子は強制アンラップとも呼ばれます。
- nilの値を強制アンラップをするとプログラムが停止してしまいます。
- 確実にnilの値ではない場合に使用します。
オプショナルデータ!
var optIntNUm:Int? = 10
var intNum = optIntNum!
print(intNum)
- 1行目でopIntNumがオプショナル型で宣言されています。
- 〇〇!で強制アンラップが行われます。
- optIntNumがアンラップされ、アンラップされた10が表示されます。
if let文(オプショナルバインディング)
if let文
- アンラップ成功と失敗で細かく処理を分けることができます。
- if let文を使いすぎるとコードを読み難くさせることも
- 複数のデータをコンマを区切って使用することができます。
- else以降の処理は省略することができます。
if let 定数名 = オプショナルデータ型{
処理①
}else{
処理②
}
- 定数名 = オプショナルデータ型の部分でアンラップが行われています。
- アンラップが成功すると処理①が行われます。
- アンラップに失敗すると処理②が行われます。
- ここで宣言している定数はif let{}内でのみ有効のローカル定数です。
var optIntNum:Int? = 10
if let num = optIntNum{
print(num)
}else{
print("アンラップ失敗")
- 1行目でoptIntNumがオプショナル型で宣言されています。
- let num = optIntNumで10の値がアンラップされました。
- print(num)で10が表示されます。
- この場合、else以降は無視されます。