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

  • 60
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

条件分岐

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