条件分岐
基本的にはif文、swich文など、
どの言語でも見慣れたものを使いますが、
swiftではタプル(Tuple)を利用した特殊で強力な構文を利用できます。
Switch文
if文は基本的に変わったことはないので、
Switch文からまとめてみます。
switch 式 {
case 値1:
// 処理
case 値2:
//処理
case 値3,値4:
//処理
default:
//処理
}
var color = "red"
switch color {
case "red":
println("とまれー!")
case "yellow":
println("注意!")
case "blue":
println("進めー")
default:
println("故障中")
}
出力
とまれー!
基本は上記のように他の言語と同様に使います。
範囲で分岐
caseに(数値...数値)
と指定することで、
値の範囲によって処理を分岐することができます。
// 20回のループ
for _ in 1...20 {
let num = arc4random_uniform(101) // 0~100の乱数
println("\(num):")
switch num {
case (90...100):
print("Excellent!!!")
case (41...89):
print("合格!")
case (1...40):
print("赤点!再試験!")
default:
print("0点だと...?")
}
}
出力
4点:赤点!再試験!5点:赤点!再試験!0点:0点だと...?84点:合格!93点:Excellent!!!51点:合格!76点:合格!91点:Excellent!!!80点:合格!11点:赤点!再試験!28点:赤点!再試験!9点:赤点!再試験!70点:合格!66点:合格!23点:赤点!再試験!86点:合格!0点:0点だと...?0点:0点だと...?59点:合格!44点:合格!
タプル(Tuple)を利用した分岐
let score = (90, 90) // (数学の点数,英語の点数)
switch score {
case (80...100,80...100):
print("優秀!")
case (1...79, 80...100):
print("数学頑張ろう...")
case (80...100, 1...79):
print("英語頑張ろう...")
case (1...80, 1...80):
print("がんばろ。。")
default:
print("両方0点だと...?")
}
出力
優秀!
バリューバインディング
caseの値に定数名
や変数名
を入れることで、
評価する値を定数や変数で受け取ることができます。
let score = (90, 76) // (数学の点数,英語の点数)
switch score {
case (80...100,80...100):
println("優秀!")
case (1...79, let engScore):
println("数学頑張ろう...")
println("英語は\(engScore)点!いいね!")
case (let mathScore, 1...79):
println("英語頑張ろう...")
println("数学は\(mathScore)点!いいね!")
case (1...79, 1...79):
println("がんばろ。。")
default:
println("0点だと...?")
}
出力
英語頑張ろう...
数学は90点!いいね!
Whereによる分岐
バリューバインディングを利用することで、
switchでの分岐にwhereを使った条件式を使うことができます。
let score = (50, 90) // (数学の点数,英語の点数)
switch score {
case (let mathScore, let engScore) where mathScore >= 80 && engScore >= 80 :
println("優秀!")
// 数学が80点未満、英語が80点以上
case (let mathScore, let engScore) where mathScore < 80 && engScore >= 80 :
println("数学頑張ろう...")
println("英語は\(engScore)点!いいね!")
// 英語が80点未満、数学が80点以上
case (let mathScore, let engScore) where mathScore >= 80 && engScore < 80 :
println("英語頑張ろう...")
println("数学は\(mathScore)点!いいね!")
case (let mathScore, let engScore) where mathScore < 80 && engScore < 80:
println("がんばろ。。")
default:
println("?")
}
出力
数学頑張ろう...
英語は90点!いいね!
フォールスルー fallthrough
今までのswitch文を見てきて
breakを書いてないから次の処理も実行されちゃうじゃん!
って思った方もいると思います。
Swiftのswitch文では、
『break』を書かなくてもswitch文を抜けるようになっています。
※break書き忘れによるミスが出やすいというswich文の良くない仕様を解消するためのようです。
ただ、次の処理も実行するという処理が
便利な場合もあるため、swiftでも方法が用意されています。
それがfallthrough
です。
let fall = "b"
switch fall {
case "a":
println("a")
fallthrough
case "b":
println("b")
fallthrough
case "c":
println("c")
fallthrough
default:
println("終了")
}
出力
b
c
終了
if文
基本的には条件部分のカッコ()は省略できます。
if 条件 {
// 処理
}
var score = 95
if score >= 90 {
println("Excellent!!!")
} else if score >= 70 {
println("Good!")
} else {
println("Excellen")
}
print("あなたのスコアは\(score)点でした。")
出力
Excellent!!!
あなたのスコアは95点でした。
複数条件の場合
if 条件1 && 条件2 {
// 処理
}
if 条件1 || 条件2 {
// 処理
}