guard let
CoddyのSwiftジャーニー「基礎」セクションの一部。レッスン 13/86。
if letはオプショナルの値をアンラップし、値が存在するときにコードを実行しますが、guard letはその逆の方法を取ります。値が存在しない場合は早期に終了します。これは、「問題のある」ケースを先に処理し、メインのロジックをすっきり保ちたい関数内で特に役立ちます。
func greet(name: String?) {
guard let unwrappedName = name else {
print("No name provided")
return
}
print("Hello, \(unwrappedName)!")
}
greet(name: "Taylor") // こんにちは、Taylor!
greet(name: nil) // 名前が指定されていませんguard let文は、nameに値があるかどうかを確認します。値がない場合は、elseブロックが実行され、関数はreturnで終了します。オプショナルに値が含まれている場合は、unwrappedNameにアンラップされます。ここがif letとの重要な違いです。アンラップされた変数はブロック内だけでなく、関数の残りの部分でも使用できます。
この「早期終了」パターンでは、エラーケースを先に処理することでコードを読みやすく保ち、メインのロジックが複数のif文の中にネストされるのを防ぎます。
チャレンジ
簡単任意のageパラメーターを受け取り、guard letを使って安全にアンラップする関数validateAgeを書いてください。
年齢がnilの場合は、"Invalid age"を返してください。それ以外の場合は、[value]がアンラップした年齢を表す"Age: [value]"を返してください。
パラメーター:
age(Int?): 人の年齢を表す任意の整数
戻り値: 文字列。入力がnilの場合は"Invalid age"、アンラップした値を含める場合は"Age: [value]"です。
関数の下にあるロックされた行は、入力から年齢を読み取り(入力がnilの場合はnilになります)、関数の戻り値を出力します。
例: ageが25の場合は、"Age: 25"を返してください。ageがnilの場合は、"Invalid age"を返してください。
自分で試してみよう
func validateAge(age: Int?) -> String {
// ここにコードを書いてください
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Swiftプレイグラウンド