想定されるシナリオ
if letとguard letは、オプショナル型の値を取り出すための構文です。これらの違いは、値がnilの場合の処理の流れにあります。
if letは、オプショナル型の値がnilでない場合にその値を取り出し、そのスコープ内で利用します。値がnilの場合、elseブロックが実行されます。
例:
if let someString = b {
// 値があるときは、この処理を実行する
print("Optional Value \(b)")
} else if b == nil {
// 値がnilのときは、この処理を実行する
print("b is nil")
} else {
print("b has a value")
}
guard letは、オプショナル型の値がnilでない場合にその値を取り出し、その後のコードで利用します。値がnilの場合、guardブロック内のelseブロックが実行され、その後のコードは実行されません。
例:
func say(value: String?) {
// nilだとreturnする
guard let value = value else {
return
}
print(value)
}
これらの構文を適切に使い分けることで、コードの可読性と安全性を向上させることができます。
Playgrandでそのまま実行できるコード
if letの処理を書いてみました。この場合だと、変数bにnilが入ってるので、分岐処理でb is nilとログに出力されます。
Optional型を使っているので、Stringとnilを変数に代入することができます。
using if let
var a: String?
a = "Hello"
var b: Optional<String>
b = "Hello"
b = nil
// if letは、オプショナル型の値を取り出すための構文です。
if let someString = b {
// 値があるときは、この処理を実行する
print("Optional Value \(b)")
} else if b == nil {
// 値がnilのときは、この処理を実行する
print("b is nil")
} else {
print("b has a value")
}
using guard let
functionを定義して、実行しないと使えなかったので、sayという関数を作りました。
func say(value: String?) {
// nilだとreturnする
guard let value = value else {
print("nilだよ!")
return
}
print(value)
}
let arg: String? = nil
say(value: arg)
最後に
1年前は、理解できなかった。if letとguard letの使い方の解説でした。他の言語だとこんなのないような...
Swift独特ですね。