ループ処理
for文、for-in文、while文、do-while文などありますが、
Swiftではなるべくfor-in文を使うのが良さそうです。
for-in ~指定範囲から順に値を取り出して実行~
for 変数 in 開始値...最終値 {
// 処理
}
for 変数 in 開始値..<最終値 { // 最終値を含まない
// 処理
}
開始値から始まり、最終値になるまで
カウントアップして処理が実行されます。
順番に『変数』に現在の値が入ります。
※注意点
変数には、『var』を宣言しません。
var sum:Int = 0
for num in 1...5 {
sum += num
println("\(num)回目:\(sum)")
}
1回目:1
2回目:3
3回目:6
4回目:10
5回目:15
取り出した変数を使わない場合は、
以下のようにワイルドカード(_)を使うことができます。
for _ in 1...5 {
let num = arc4random_uniform(100)
println(num)
}
10
86
87
93
64
for-in ~コレクションの値を順に取り出す~
for 変数 in コレクション {
// 処理
}
一番利用すると思われるのがこのfor-in文。
コレクション(配列、辞書)などを順に取り出して処理を行う。
要素の分だけループされる。
Array型の場合
let numList = [10,43,231,43,54]
for num in numList {
println(num)
}
10
43
231
43
54
Dictionary型の場合
let menuList = ["coffee": 320, "tea": 280, "latte": 380, "cappuccino": 380, "mocca": 400]
for (menu,price) in menuList {
println("\(menu)は\(price)円")
}
cappuccinoは380円
coffeeは320円
moccaは400円
latteは380円
teaは280円
上ように扱うことができる。
ただ、取り出される順番はインデックス順にはならない。
※Dictionaryにはインデックスが存在しない。
また、下記のように辞書(Dictionary)のキーのみ、値のみ取り出すこともできる。
for menu in menuList.keys {
println(menu)
}
for price in menuList.values {
println(price)
}
cappuccino
coffee
mocca
latte
tea
380
320
400
380
280
String型の場合
for char in "Swift"{
println(char)
}
S
w
i
f
t
for ~カウンタを数えて繰り返す~
// Stringの配列
let drinkList = ["coffee","tea","latte","cappuccino","mocca"]
// drinkListの要素分だけループ
for(var i=0; i<drinkList.count; i++) {
println(drinkList[i])
}
coffee
tea
latte
cappuccino
mocca
while
while (ループ条件) {
//処理
}
ループ条件を満たしている限り処理をループする文。
swiftに限ったことは特にありません。
var spelUseCount = 5
while(spelUseCount > 0) {
//処理
println("⚪︎⚪︎はファイアの魔法を使った!")
spelUseCount--
}
⚪︎⚪︎はファイアの魔法を使った!
⚪︎⚪︎はファイアの魔法を使った!
⚪︎⚪︎はファイアの魔法を使った!
⚪︎⚪︎はファイアの魔法を使った!
⚪︎⚪︎はファイアの魔法を使った!
do-while
do {
// 処理
} while (ループ条件)
while文はループ条件をチェックした後に処理を行っていた。
なので、条件を満たしていなければ一度も実行されない。
それに対して、
do-while文は一度実行された後にループ条件をチェックするため
必ず一度は実行される。
var result:UInt32
// 乱数resultが50未満であれば、ループする。
do {
result = arc4random_uniform(100) // 0~99の乱数
} while (result < 50)
22
63 // 50以上のためここで終了
ループにラベルをつける
for文などのループにhogehoge:for(...)
と書くことでループにラベルを付けることができます。
ラベルを付けることでどんなことができるのか?
コードの可読性が上がります。
繰り返し処理を中断する場合、通常はbreak
を使いますが、
下のように、continue xLoop
と明示することで
どのループに処理がいくのかを瞬時に把握することができます。
xLoop:for x in 0...5 {
yLoop:for y in 0...5 {
if (x<y){
print("\n")
continue xLoop // yLoopのfor文処理を中断して、xLoopのfor文に抜ける。
}
print((x,y))
}
}
(0, 0)
(1, 0)(1, 1)
(2, 0)(2, 1)(2, 2)
(3, 0)(3, 1)(3, 2)(3, 3)
(4, 0)(4, 1)(4, 2)(4, 3)(4, 4)
(5, 0)(5, 1)(5, 2)(5, 3)(5, 4)(5, 5)
また、下記のようにbreak xLoop
とすると
xLoopのループを中断させることができます。
つまり、内側のループから外側のループをbreakすることができます。
xLoop:for x in 0...5 {
yLoop:for y in 0...5 {
if (x<y){
print("\n")
break xLoop // yLoopのfor文処理を中断して、xLoopのfor文に抜ける。
}
print((x,y))
}
}
(0, 0)