【Swift超基礎】繰り返し処理の基礎〜while文とfor文〜
本記事では、Swiftで利用できるwhile文やfor文といった繰り返し処理について書いていきます。
繰り返し処理
繰り返し処理は、ある一定の条件下で指定された処理を繰り返すための構文です。
繰り返し処理には大きく分けてwhile文とfor文が存在し、役割や使う場面が少しずつ変わってきますのでそれぞれについて解説していきます。
while文
while文は、指定した条件を満たしている間、繰り返し処理を行い続けるための構文です。
形式としては、以下のような形でwhileから始まり、後ろに条件式を記述し、その中に処理をしていきます。
Swiftの処理が実行されて、処理がwhileの行まで来た段階で条件式を確認し、結果がtrueであれば処理が括弧内に進み、結果がfalseであれば括弧内の処理を全て飛ばしてそれ以降の処理に進みます。
また条件式の値がtrueとなり、括弧内の処理を実行した後、再度whileの行に処理が戻り、1回目と同じように条件式を判定して次の処理を実行するか確認の確認を行うという流れを条件式の値がfalseになるまで繰り返します。

具体例として、クラスメイト10名のテストの点数を合計点数が500になるまで加算していきます。まずはwhile文を使用しない形で計算を行ってみます。もっと効率的な書き方があるのはさておき、今回はif文で確認しながら書いていきます。
if文を含む分岐処理については以下の記事でも紹介していますのでご覧ください。
var score = [100, 100, 100, 100, 100, 90, 90, 90, 90, 80]
var totalScore = 0
totalScore += score[0]
//totalScoreが500以上でなければif内の処理を行う
if !(totalScore < 500){
totalScore += score[1]
}
if !(totalScore < 500){
totalScore += score[2]
}
if !(totalScore < 500){
totalScore += score[3]
}
.
..
...
上の例のように、繰り返し内容の確認を行いながら処理をしたい場合に、whileを使用せずに書くと非常に長くて読みづらいソースになってしまいます。では、whileを使用した例を見ていきましょう。
var score = [100, 100, 100, 100, 100, 90, 90, 90, 90, 80]
var count = 0
var totalScore = 0
//500以上になるまで、処理を繰り返す。
while totalScore <= 500{
totalScore += score[count]
count ++
}
whileを使用するとたったこれだけの行数で先ほどのソースと全く同じ処理が書けてしまいました!
whileを使用することで、何度も繰り返す必要がある処理を劇的に簡単に書くことができます。10件程度であれば、手間でもif文などで書くこともできますが、これが何千、何万回と繰り返す処理となるとものすごい大量のコードを書くことになってしまいます。
そんな負担を減らしてくれるのがwhile文です。続いて、whileの変化系の構文についても紹介していきます。
repeat – while 文
repeat – while 文は、while文の派生系のような構文で、繰り返し処理を行うという点ではほとんどwhile文と同じです。1点違う点は、最初の1回目の処理を必ず実行するという点です。
理由は、repeat – while 文では括弧内の処理を行うかどうかの条件式を最後に見るためです。実際の文を見ていきましょう。
var score = [100, 100, 100, 100, 100, 90, 90, 90, 90, 80]
var count = 0
var totalScore = 0
//最初の一回目は条件に関わらず処理を実行し、500以上になるまで、処理を繰り返す
repeat {
totalScore += score[count]
count ++
}while totalScore <= 500
repeat – while 文は、条件に関係なく1回は特定の処理を行いたい、その後に条件によっては同じ処理を繰り返したい場合などに利用することができます。
しかしrepeat – while 文は、後から再度対象箇所のソースを触ったり、他の開発者が改修を加える場合にも動きを確認しにくかったり、意図しない場合に処理を行なってしまう動きをしてしまうなどのデメリットがあります。
そのため、実際にはrepeat – while 文を利用しないような構造のソースコードを書いていくことが好ましいと思います。
for文
while文と並び、頻繁に利用される構文であるfor文について解説していきます。
for文もwhile文と同様に、特定の条件下で繰り返し同じ処理を行いたい場合に使用し、条件を満たすと処理を通り抜けるという構造になります。
for文には使い方によっていくつかの種類が存在しており、それぞれについて解説していきます。
- 指定した回数ループ
- 配列をループ
- ディクショナリ型をループ
- 文字列をループ
指定した回数ループ
for文の基本形である指定した回数分ループする方法は、簡単でループしたい回数の範囲を指定するだけです。

ループ変数とは、ループの中でのみ使用できる変数で、基本的にはfor文の開始と同時に宣言され、オートインクリメント(自動で値が1ずつ加算される)されます。
for文のループ変数としては、一般的に「i」という変数が利用されます。
以下の例では、変数iが宣言されると共に「0..<3」という条件式が指定されており、これはiの初期値が0でiの値が0から3未満の間ループするという条件になっており、1度括弧内の処理が完了するとiには1が加算され、次の処理に進み、iが3以上になると処理を抜けます。
for i in 0..<3{
print("iの値は\(i)")
}
実行結果
0
1
2
上のfor文では、0から始まる昇順で処理が行われていましたが、降順で処理を行うこともできます。
for i in (0..<3).reversed(){
print("iの値は\(i)")
}
実行結果
2
1
0
上記のように、範囲指定の条件式を括弧で括ってその後ろに.reversedをつけることで、降順でループ処理を行うことが可能です。
配列をループ
配列型のデータをfor文でループする方法も基本形とほぼ同じです。また、配列データのループはfor文の中で非常に使用される頻度が多いです。

書き方はご覧の通り基本の型とほぼ一緒です。条件式の部分に配列型の変数が入ります。違いとしては、ループ変数の中には配列のデータが0番目から順に格納されていきます。
var scores = [100,90,80]
for score in scores{
print(score)
}
実行結果
100
90
80
このように配列の中身を先頭から順番に参照して、そのデータを用いて処理を行うことができます。
また、基本形とのループの違いとして、配列をループした場合には配列に入っている要素数の数だけループするという点も重要な違いになります。
配列を使用したソースを実装する際には必ずと言っていいほどこのfor文が活躍することでしょう。
ディクショナリ型をループ
配列と同様に使用頻度の高い、ディクショナリ型のループについても説明していきます。
ディクショナリ型とは、辞書型やキーバリュー型などとも言われ、keyとvalueが1セットとなり、辞書のようにkeyを指定して、valueを取得するなどの使い方ができます。
var score = ["国語" : 70, "数学" : 100 , "英語" : 90]
ディクショナリ型をループする際には、forの開始時にkeyの値を格納する変数とvalueの値を格納する変数をそれぞれ宣言し、inの後にディクショナリ型のデータを配置します。

実際のソースの例として、国語、数学、英語の点数を順番にfor文で出力していきます。
var scores = [ "国語" : 70, "数学" : 100, "英語" : 90]
for (key, value) in scores{
print("\(key)の点数は\(value)点です。")
}
実行結果
国語の点数は70点です。
数学の点数は100点です。
英語の点数は90点です。
ここで宣言しているkey,valueという変数は任意で宣言しているものなので、名前はなんでも構いません。ただ、最初の変数にディクショナリ型のkeyの値が代入され、2つ目の変数にvalueの値が入るということを認識しておいてください。
文字列をループ
番外編的な形になりますが、文字列型のデータもfor文を利用してループすることが可能です。

for文の条件式部分で文字列型変数の後ろに.charactersをつけることで文字列の中身を1文字ずつ参照することが可能です。
var str = "こんにちは"
for char in str.characters{
print(char)
}
実行結果
こ
ん
に
ち
は
このように1文字ずつ参照できますので、特定の文字を取り出したりする場面などで使用することもできます。
まとめ
本記事では、while文とfor文についてまとめてきました。最後にざっくり内容をまとめます。
- while文は、条件式を判定してループする場合に使用することが多い
- repeat – while 文は、最初の一回は必ず処理を行うループで、そもそもあまり使わない
- for文は、配列やディクショナリ型のデータをループする際に使用することが多い
他にもif文やswitch文についてなど、Swiftに関する記事をいくつか書いていますのでぜひそちらもご覧ください。
-
前の記事
【Swift超基礎】条件分岐の基礎~if文とswitch文~ 2023.05.10
-
次の記事
【Swift基礎】様々な演算子を徹底解説 2023.06.03