LoginSignup
4
4

More than 5 years have passed since last update.

The Swift Prgramming Language ~Control Flow~

Last updated at Posted at 2014-06-18

The Swift Programming LanguageのLanguage Guideの"Control Flow"をざっとまとめたものです。

Objective-Cを始め、既に他の言語を習得されてる方向けです。

前章 Collection Dictionary

前提

条件式の結果は、Bool型の値の必要がある。

if 1 ではなく
if true や if 1 == 1 {}

と書く必要がある

For-In

for idx in 1...5 {
  println("\(idx)") // 1 2 3 4 5が出力される
}

idx // コンパイルエラー。変数が定義されていない。
  • idxは定数(let宣言)されている。letは省略可能.
  • idxはforのブロックステートメント中のみ有効で、ブロックを抜けると参照できない。
  • idxが不要な場合は、_で省略可能.
for _ in 1...5 {
}

配列の例

let values = [1, 2, 3, 4, 5]
for val in values {
  println("\(val)")
}

辞書の例

let values = ["A":1, "B":2]
for (key,val) in values {
}

文字列の場合

for ch in "Hello" {
  ch // chはCharacter型
}

For-Condition-Increment

()なしで書ける事を除いて、C#やJavaと同じ.

While

C#やJavaと同じ.

Do-While

C#やJavaと同じ.

If

C#やJavaと同じ。

Switch

  • caseの対になるbreakは、文が無い場合を除いて不要.
  • ブロック{}を利用しなくてもcase内で、変数を定義できる。
  • defaultは必須.無いとコンパイルエラーになる.
  • case文の値は定数である必要はない.
let someCharacter: Character = "x"
switch someCharacter {
case "a", "b", "c": // 複数の条件を定義する場合は,で区切る
  println("abc")
default
  break; // caseやdefault内に文が無い場合は、breakが必須
}

範囲マッチ

var value = 123
var result = ""
switch value {
case 0
  result = "0"
case 1...100 // 1〜100
  result = "1~100"
case 101...1000 // 101~1000
  result = "101~1000"
default
  result = "break"
}

タプル

var value = (1,2)
var result = ""
switch value {
case (0, 0)
  result = "0,0"
case (_, 0) // (任意の値, 0)
  result = "_,0"
case (0, _) // (0, 任意の値)
  result = "0,_"
case (1..2, 1..2) // (1~2, 1~2)
  result = "\(value.0) \(value.1)"
default
  result = "break"
}

Value Binding

var value = (1,2)
var result = ""
switch value {
case (let x, 0)
  result = "0,0"
case (0, let y) // (任意の値, 0)
  result = "_,0"
case (0, _) // (0, 任意の値)
  result = "0,_"
case (1..2, 1..2) // (1~2, 1~2)
  result = "\(value.0) \(value.1)"
default
  result = "break"
}

Where

switch文に条件文を記述できる.

var value = (1,2)
var result = ""

switch value {
case (let x, let y) where x == y:
  result = "equals"
case (let x, let y) where x == -y
  result = "x == -y"
case (let x, let y):
  result = ""
}

Control Transfer Statements

continue

C言語などと同じ

Break

C言語などと同じ.
ループ中のswitch文中のbreakは、ループをbreakしない。(C言語でのswitchのbreakと同じ扱い)

Fallthrough

C言語でのcase 1: case 2:とbreakを書かない場合と同様になる。

※ いまいち「使いたい」という気にはならない。


let val = 1
var result = ""
switch val {
case 1:
  result += "\(val)"
  fallthrough
default:
 }

Labeled Statements

ループをbreakで抜けるときなど、ラベルをつける事で抜け先を明示できる。


myLoop: while true {
   var result = myfunc();
   switch(result) {
   case 1,2,3:
     break myLoop
   case 4,5,6:
     continue myLoop
   default:
     break
   }
   ...
}
4
4
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
4
4