The Swift Programming LanguageのLanguage Guideの"Control Flow"をざっとまとめたものです。
Objective-Cを始め、既に他の言語を習得されてる方向けです。
前提
条件式の結果は、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
}
...
}