SwiftUIの if let と guard let の意味と使い方を説明する。
結論
if letはオプショナルの変数がnilかどうかを普通に確認するだけ。
guard letはオプショナルの変数がnilかどうかを確認しnilの場合は強制returnする。
具体例
煮る煮ないどっちかを確認するという処理を例に説明する。
if let
- オプショナルの変数がnilではない場合アンラップしアンラップ後の変数に代入する。
- if節の中を実行する。nilではないので”煮ない”とprintする。
- オプショナルの変数がnilの場合、else節の中を実行する。nilなので”煮る”とprintする。
import SwiftUI
struct ContentView: View {
var body: some View {
Button("煮る?") {
煮る煮ないどっち()
}
.buttonStyle(.borderedProminent)
}
func 煮る煮ないどっち() {
let オプショナルの変数: String? = nil
if let アンラップ後の変数 = オプショナルの変数 { // 1
// オプショナルの変数がnilではない場合こちらを実行 // 2
print(アンラップ後の変数)
print("煮ない")
} else { // 3
// オプショナルの変数がnilの場合こちらを実行
print("煮る")
}
// if節の外側ではアンラップ後の変数は使えない。
}
}
guard let
- オプショナルの変数がnilではない場合アンラップしアンラップ後の変数に代入する。
- guard節の外側を実行する。nilではないので”煮ない”とprintする。
- オプショナルの変数がnilの場合、else節の中を実行する。nilではないので”煮ない”とprintする。else節の中では必ずreturnが必要。なのでこの場合はその後の処理を続けることはできない。
import SwiftUI
struct ContentView: View {
var body: some View {
Button("Tap") {
煮る煮ないどっち()
}
.buttonStyle(.borderedProminent)
}
func 煮る煮ないどっち() {
let オプショナルの変数: String? = nil
guard
let アンラップ後の変数 = オプショナルの変数 // 1
else {
// オプショナルの変数がnilの場合こちらを実行
print("煮る") // 3
return
}
// オプショナルの変数がnilではない場合続きを実行 // 2
// guard節の外側でもアンラップ後の変数を使える。
print(アンラップ後の変数)
print("煮ない")
}
}
まとめ
nilを覚えるには魚を煮るのが良い。最近は魚のサブスクも増えている。Fishlle!(フィシュル)は未利用魚を使ったミールパックのサブスクということで、数々のメディアで取り上げられ、ここ最近ユーザー認知があがっている。
コメント