OptionalはSwiftの安全性を支える重要な概念であり、中級者にとっては使い分けの理解が品質の高いコードを書くために重要となってくる概念です。if letはOptionalを一時的にアンラップし、条件分岐の中で安全に値を扱いたい場合に適しています。
そもそもOptionalとは
「値が存在しない状態である(nil)を安全に処理するための変数」です。また値がない状態のことを「nil」と言います。
Yama
データのやり取りをアプリに実装したい場合にnilを受け取る可能性は十分にあります。
ではこのOptionalをどのように利用するのか?
これらが一体どういった意味を持っているのかをコードの例を用いて説明します。
「Optionalの使い方」
//Optionalの定義の仕方
var score: Int?
//Optionalに値を入れる方法
score = 100
「重要ポイント」
Optionalは「アンラップ」という方法を使う必要があります。「アンラップ」
以下のようにコードを組み立てることで、値がある時だけ実行されます。
if let unwrappedScore = score {
print(unwrappedScore)
}
「強制アンラップ」「!」をつけることで強制的にアンラップすることを試みることができますが、このOptionalに値がなかった場合、クラッシュしてしまうことになります。
しかし強制アンラップは「絶対にnilではない」と断言できる場合のみ使用します
//値が入っていない場合、クラッシュしてしまう
print(score!)
「if let」と「guard let」の使い方「if let」は値が存在する場合のみ使用できます。
つまり値が存在する前提でコードを書くのに最適です。
「guard let」は値が存在しないということをメインにコードを書き進めます。
Yama
iOSアプリ開発においてのデータの受け取りの際にこの動作は必ず必要です。
以下が「if let」と「guard let」のコード例です。
if let
var age: Int? = 50
if let unwrappedAge = age {
print("私は\(unwrappedAge)です")
}else{
print("年齢は公開していません")
}
guard let
func getAge(age: Int?) {
guard let unwrappedAge = age else {
print("年齢は非公開です")
return
}
print("年齢は \(unwrappedAge) です")
}
処理範囲が限定されるため、ローカルなロジックに向いています。一方guard letは早期リターンを前提とし、値が存在しない場合に処理を中断する用途で使われます。関数の冒頭で前提条件を明示できるため、可読性が高く、ネストを避けたコードを書ける点が利点です。
それぞれの特徴を理解し、処理の流れや可読性を意識して使い分けることで、Swiftらしい安全で洗練されたコードが実現できます。