想定されるシナリオ
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独特ですね。