for文は主に繰り返しの処理を行います。
for文はfor-inが使われます。
書き方は基本的には以下の通りです。
繰り返し処理をする内容
}
このfor文の条件式の書き方が他の言語とちょっと異なっています。
例えば、for文の変数部分で定義した変数iが0から9になるまで繰り返す場合は以下のように書きます。
[swift]
for i in 0..<10 {
print("i = \(i)")
}
[/swift]
実行結果
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
補足ですが、Javaのように書けば以下のように書きます。
[java]
for(int i = 0;i < 9;i++){
System.out.println("i = " + i);
}
[/java]
ちなみに、終了値を含める場合は以下のように書きます。
[swift]
for i in 0…10 {
print("i = \(i)")
}
[/swift]
実行結果
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
i = 10
基本的にここで定義した変数は整数になります。
小数を開始値や終了値に小数を使うと以下のように書きます。
繰り返し処理をする内容
}
[swift]
for i in stride(from: 0.0, to: 3.0, by: 0.25) {
print("i = \(i)")
}
[/swift]
実行結果
i = 0.25
i = 0.5
i = 0.75
i = 1.0
i = 1.25
i = 1.5
i = 1.75
i = 2.0
i = 2.25
i = 2.5
i = 2.75
ですが、小数を使うことはあまりおすすめしません。
例えば、刻み値を0.1にすると実行結果が変な風になります。
[swift]
for i in stride(from: 0.0, to: 1.0, by: 0.1) {
print("i = \(i)")
}
[/swift]
実行結果
i = 0.1
i = 0.2
i = 0.30000000000000004
i = 0.4
i = 0.5
i = 0.6000000000000001
i = 0.7000000000000001
i = 0.8
i = 0.9
ここの原因はまだしっかりと調べていませんが、原因の候補として0.1を二進数で厳密に表せないからではないかと思っています。
また、配列などのfor-inも使われます。
配列の中身全てを変数に格納して繰り返し処理を行うことがでいます。
繰り返し処理をする内容
}
[swift]
let stringArray = ["first", "second", "third", "fourth", "fifth"];
for string in stringArray {
print("stringArray: \(string)")
}
[/swift]
実行結果
stringArray: second
stringArray: third
stringArray: fourth
stringArray: fifth
時によって、今の処理が何回目なのか、配列の項番を使いたい時もあるでしょう。
そういう時は、配列のオブジェクトに用意されているenumeratedのメソッドを使います。
[swift]
let stringArray = ["first", "second", "third", "fourth", "fifth"];
for (index, string) in stringArray.enumerated() {
print("stringArray[\(index)]: \(string)")
}
[/swift]
実行結果
stringArray[1]: second
stringArray[2]: third
stringArray[3]: fourth
stringArray[4]: fifth
また、上記の例からも察しがつくと思いますが、Dictionary型に適応することもできます。
[swift]
let stringDictionary = ["first":100,
"second":300,
"third":600,
"fourth":900,
"fifth":12000]
for (key, value) in stringDictionary {
print("stringArray \(key): \(value)")
}
[/swift]
実行結果
stringArray first: 100
stringArray fifth: 12000
stringArray fourth: 900
stringArray second: 300