オプショナルのアンラップ

オプショナル型をアンラップする必要性

オプショナル型のデータを利用するときはアンラップという処理をする必要があります。

  • アンラップしないと演算することができません。
  • 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が表示されます。
以下の場合プログラムがクラッシュします
var optIntNUm:Int? = nil
var intNum = optIntNum!
print(intNum)

nilの値はアンラップすることができません。

例の場合、nilの値を強制アンラップしようとしてしまうのでプログラムがクラッシュしてしまいます。

強制アンラップの取り扱いには十分に注意が必要です。

強制アンラップは確実にnilの値が入ってないときに使用します。

絶対に行ってはいけません。

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以降は無視されます。

while文とrepeat while文while文とrepeat while文