導入
Optionalの中身を使うには「値が入っているか確認してから取り出す」のが基本。その定番が if let と guard let です。
説明
if let 名前 = Optional は、値が入っていればその中身を取り出して ブロックを実行し、nil なら実行しません。
let input: String? = "こんにちは"
if let message = input {
print("受け取った: \(message)") // ここでは message はふつうの String
} else {
print("入力がありません")
}
関数の入り口で「値が無ければ早く抜ける」書き方には guard let が向いています。guard let ... else { 抜ける処理 } の形で、取り出した値はその後もずっと使える のが特徴です。
func greet(_ name: String?) {
guard let name = name else {
print("名前が不明です")
return
}
print("ようこそ、\(name) さん") // ここから先で name をそのまま使える
}
greet("花子")
greet(nil)
if let は「取り出せたブロックの中だけ」、guard let は「取り出せたら以降ずっと」使える、と覚えましょう。iOSアプリでは、この2つで値の有無を安全にさばきます。
やってみよう
input を nil にすると else 側が動きます。greet に名前を渡したり nil を渡したりして、出力の違いを確かめましょう。
演習
let name: String? = "山田" を if let で取り出し、「山田さん」のように表示してください。
ヒント1を見る
if let n = name { print("\(n)さん") }
ヒント2を見る
n は取り出したあとのふつうの文字列です。