<Swift>条件分岐
今回の記事でわかること
- if 文を使った条件分岐ができる
- switch 文を使った複数条件分岐ができる
- guard 文を使った早期リターンを知る
if 文
もっとも基本的な条件分岐。「もし~なら処理する」という書き方ができます
let score = 75
if score >= 80 {
print("とてもよくできました!")
} else if score >= 60 {
print("合格です")
} else {
print("不合格です")
}
/* 出力結果
合格です
*/
if → else if → else の順位条件をチェックし、最初に当てはまったブロックを実行します
ネストした if 文
条件をさらに細かく分けたい場合は入れ子にできます
let age = 20
let hasID = true
if age >= 18 {
if hasID {
print("入場できます")
} else {
print("身分証を持ってきてください")
}
} else {
print("18歳未満は入場できません")
}
/* 出力結果
入場できます
*/
switch 文
Swift の switch はとても強力で、C言語や C++ とは違って break を書かなくても自動で分岐が終了されるうえ、整数だけでなく文字列や範囲、パターンマッチにも対応しています
let grade = "B"
switch grade {
case "A":
print("素晴らしい!")
case "B":
print("よくできました")
case "C":
print("合格です")
default:
print("再試験です")
}
/* 出力結果
よくできました
*/
範囲を使った switch 文
let score = 72
switch score {
case 90...100:
print("Sランク")
case 80..<90:
print("Aランク")
case 60..<80:
print("Bランク")
default:
print("Cランク")
}
/* 出力結果
Bランク
*/
- 90…100 は閉区間演算子(90以上100以下)
- 80..<90 は半閉区間演算子(80以上90未満)
Swift の switch 値のパターンだけでなく、範囲や where 条件も書ける上、Enum と組み合わせると型安全に条件分岐ができるため、現場では使うことが多いです
enum Result {
case success(data: String)
case failure(error: String)
}
let result: Result = .success(data: "OK")
switch result {
case .success(let data):
print("成功: \(data)")
case .failure(let error):
print("失敗: \(error)")
}
/* 出力結果
成功: OK
*/
上記は switch + enum で設計されたコードで、エラーハンドリングに使ったりします。
論理演算氏との組み合わせ
条件は &&(AND)、||(OR)、!(NOT)で組み合わせ可能です
let age = 19
let hasTicket = false
if age >= 18 && hasTicket {
print("入場できます")
} else {
print("入場できません")
}
/* 出力結果
入場できません
*/
guard 文(早期リターン)
Swift 独自の便利な書き方が guard。条件を満たさない場合に早く処理を抜けるときに使います
func enter(age: Int?, ticket: Bool) {
guard let age = age, age >= 18 else {
print("18歳未満、または年齢不明のため入場できません")
return
}
guard ticket else {
print("チケットを持っていないので入場できません")
return
}
print("入場できます!")
}
enter(age: 20, ticket: true)
enter(age: 16, ticket: true)
enter(age: nil, ticket: true)
/* 出力結果
入場できます!
18歳未満、または年齢不明のため入場できません
18歳未満、または年齢不明のため入場できません
*/
guard は「条件を満たさなければ即 return」で、ネストが深くならず読みやすいコードになります