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



# 条件分岐

基本的にはif文、swich文など、
どの言語でも見慣れたものを使いますが、
swiftではタプル(Tuple)を利用した特殊で強力な構文を利用できます。


# Switch文

if文は基本的に変わったことはないので、
Switch文からまとめてみます。

```swift
switch 式 {
	case 値1:
		// 処理
	case 値2:
		//処理
	case 値3,値4:
		//処理
default:
	//処理
}
```

```swift
var color = "red"

switch color {
  case "red":
    println("とまれー！")

  case "yellow":
    println("注意！")

  case "blue":
    println("進めー")

default:
  println("故障中")
}

```

```lang:出力
とまれー！
```

基本は上記のように他の言語と同様に使います。


## 範囲で分岐

caseに`(数値...数値)`と指定することで、
値の範囲によって処理を分岐することができます。

```swift
// 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点だと...？")
    }
}
```

```lang:出力
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)を利用した分岐


```swift
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点だと...？")
}

```


```lang:出力
優秀!
```

## バリューバインディング

caseの値に`定数名`や`変数名`を入れることで、
評価する値を定数や変数で受け取ることができます。


```swift
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点だと...？")
}
```

```lang:出力
英語頑張ろう...
数学は90点！いいね！
```

## Whereによる分岐

バリューバインディングを利用することで、
switchでの分岐にwhereを使った条件式を使うことができます。


```swift
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("？")
}
```

```lang:出力
数学頑張ろう...
英語は90点！いいね！
```

## フォールスルー fallthrough


今までのswitch文を見てきて

breakを書いてないから次の処理も実行されちゃうじゃん！

って思った方もいると思います。


Swiftのswitch文では、
『break』を書かなくてもswitch文を抜けるようになっています。

※break書き忘れによるミスが出やすいというswich文の良くない仕様を解消するためのようです。

ただ、次の処理も実行するという処理が
便利な場合もあるため、swiftでも方法が用意されています。
それが`fallthrough`です。

```swift

let fall = "b"

switch fall {
case "a":
    println("a")
    fallthrough
case "b":
    println("b")
    fallthrough
case "c":
    println("c")
    fallthrough
default:
    println("終了")
}

```

```lang:出力
b
c
終了
```



# if文

基本的には条件部分のカッコ()は省略できます。

```swift
if 条件 {
	// 処理
}
```

```swift
var score = 95

if score >= 90 {
	println("Excellent!!!")
} else if score >= 70 {
	println("Good!")
} else {
	println("Excellen")
}

print("あなたのスコアは\(score)点でした。")
 
```


``` lang:出力
Excellent!!!
あなたのスコアは95点でした。
```

### 複数条件の場合


```swift
if 条件1 && 条件2 {
	// 処理
}

if 条件1 || 条件2 {
	// 処理
}

```