LoginSignup
71
68

More than 5 years have passed since last update.

Swift さくっと確認したい基礎文法 [いろんな条件分岐(switch文、if文)]

Last updated at Posted at 2015-04-11

条件分岐

基本的には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 {
    // 処理
}

71
68
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
71
68