繰り返し処理に使えるSwiftのfor文とfor-in文の便利な使い方まとめ

19/03/03 16:04:15     19/03/10 14:39:33

Swiftのfor文とfor-in文

Swiftは新しいプログラミング言語であるため、言語仕様のマイナーチェンジが多いです。

そのうち安定するかと思いますが、特に顕著なのはSwift2とSwift3のfor文の違いです。

そこでこのページでは、Swift2とSwift3の違いも踏まえたうえで、Swiftでのfor文とfor-in文の使い方を解説します。

数字の出力

まずはループ処理で数字を順番に出力していくコードを紹介します。Swift2.0で昇順に出力するためのコードは以下です。

for var i = 0; i < 5; i++ {
    print("i: \(i)")
}

このコードはSwift2までは使用可能でしたが、Swift3以降は使用できなくなりました。Swift3以降では、for-in文を使って以下のように記述します。

for var i = 0; i < 5; i++ {
    print("i: \(i)")
}

これを実行すると、以下のようにコンソール出力されます。

i: 0
i: 1
i: 2
i: 3
i: 4

reservedを使用すると、降順で出力されます。サンプルコードは以下です。

for i in (0 ..< 5).reversed() {
    print("i: \(i)")
}

実行すると以下のように降順で出力されます。

i: 4
i: 3
i: 2
i: 1
i: 0

配列の出力

次に、用意した配列の中身をループで出力するコードを紹介します。まずSwift2でのコードは以下のようになります。

let foods = ["ra-men", "gyo-za", "karaage", "tya-han"]
for var i = 0; i < foods.count; i++ {
    if (i % 2) != 0 {
        print("\(foods[i])")
    }
}

このコードはSwift2なら配列の中身が出力されますが、Swift3だとエラーコードが出力されます。

具体的には以下のようなものです。

error: C-style for statement has been removed in Swift 3
for var i = 0; i < foods.count; i++ {

Swift3で動くように書くにはfor-in文を使います。具体的には以下のようになります。

for value in foods {
    print("\(value)")
}

このようにfor-in文を記述すると、以下のように配列の中身が出力されます。

ra-men
gyo-za
karaage
tya-han

enumeratedで配列をループする

enumeratedを使用すると配列のインデックスとバリューをセットで格納することができます。公式は以下です。

for (index番号, 値) in 配列.enumerated()

サンプルコードは以下です。

let foods = ["ra-men", "gyo-za", "karaage", "tya-han"]
for (index, value) in foods.enumerated() {
    print("\(value)")
}

実行すると以下のようにコンソール出力されます。

ra-men
gyo-za
karaage
tya-han

strideで配列をループする

strideを使ってfor-in文と組み合わせると、配列の中身を出力できます。

enumeratedと比べるとやや複雑な構文に見えるかもしれませんが、出力時にindexやvalueではなく直接配列名を指定できます。

また配列要素の何番目から何番目という指定ができるので、特定範囲の要素のみを出力することも可能です。

まず構文は以下のようになります。

for i in stride(from: 開始位置, to: 終了位置, by: 間隔)

この構文を使ったサンプルコードが以下です。

let foods = ["ra-men", "gyo-za", "karaage", "tya-han"]
for i in stride(from: 0, to: foods.count, by: 1) {
    print("\(foods[i])")
}

辞書型の配列でキーとバリューを出力する

辞書型とはキーとバリューをセットにした型のことです。以下がサンプルコードです。

let foods = ["ra-men":850, "gyo-za":300, "karaage":400, "tya-han":500, "tenshinhan":500]
for (key,value) in foods {
    print("\(key)\(value)円なり")
}

上記のサンプルコードを実行すると以下のようにコンソール出力されます。

ra-men850円なり
gyo-za300円なり
karaage400円なり
tya-han500円なり
tenshinhan500円なり

文字列をループで一文字ずつ取り出す

String型のcharactersメソッドを使用することで、文字列を一文字ずつ抽出することが可能です。

サンプルコードは以下になります。

let str = "calendar"
for char in str.characters {
    print(char)
}

上記のサンプルコードを実行すると、以下のようにコンソール出力されます。

c
a
l
e
n
d
a
r

while文の書き方

今回のテーマはfor文、for-in文ですが、同じようにループ処理を実装できるコードにwhile文があります。コードの構文はシンプルで、以下のようになります。

while 条件 {
    // 繰り返し実行されるコード
}

この構文を利用したサンプルコードは以下です。

var count = 0
var total = 0
while count < 10 {
    count += 1
    total += count
}
print(total)

他の言語経験のある方は特段新たに理解する個所はないかと思います。

Swiftのfor-in文は他のプログラミング言語に比べて多少特殊な部分がありますが、while文は取り立てて特殊な部分はありません。

repeat-while文の書き方

repeat-while文は他のプログラミング言語にはあまりない特殊な構文です。具体的には以下のようになります。

repeat {
    // 繰り返し実行されるコード
} while 条件

while文ではwhileが上に来ましたが、repeat文ではrepeatが上に来ます。

サンプルコードは以下です。

var count = 0
var total = 0
repeat {
    count += 1
    total += count
} while count < 10
print(total)

while文のときと同じ内容をrepeat-while文で実装しました。

まとめ

以上Swiftの繰り返し処理について解説してきました。繰り返し処理はSwiftだけでなくプログラミング言語の基本概念で、Swiftで勉強しておけば他の言語でもだいたい同じです。

またスマホアプリでもパソコン用のアプリでも違いはなく、スマホのアプリ開発から入った人でも今後パソコン用アプリで応用が利きます。特に配列との相性が良いので、配列に何かしらの処理を行う際は繰り返し処理が使えないか検討すると良いです。

同じ処理を正確に繰り返すのはコンピューターの得意分野で、逆に人間の苦手分野です。その意味でfor文はまさにプログラミングのメリットをもっとも顕著に表した処理と言っても過言ではありません。

繰り返しと並ぶ基本処理に条件分岐がありますが、繰り返し処理の方がよりコンピューターならではの強みを活かせます。

▼Swift関連の記事一覧
1, 【Swiftのフリーランス案件情報付き】仕事やエンジニアの将来性・学習方法!
2,(この記事)繰り返し処理に使えるSwiftのfor文とfor-in文の便利な使い方まとめ
3, 条件分岐に便利なSwiftのSwitch文の使い方まとめ
4, アプリ開発でよく使うSwiftの4つの文法を解説します
5, Swiftのoptional型を使いこなすための7つのポイント
6, Swiftで文字列を扱うためのstring型の使い方
7, Swiftでの配列の宣言・初期化・代入・参照の方法まとめ
8, 実際の開発現場でのSwiftの変数・定数の使われ方を解説します
9, Swiftでif let文を使って出来ることとguard letの使い分けに関して
10, 開発現場でよく使うSwiftのif文の条件分岐をまとめました
11, SwiftにおけるTupleの使い方とわかりやすく解説します
12, 初心者にオススメのSwiftのサンプルコードをまとめてみました
13, SwiftのString、Int、Doubleの型の変換方法をまとめました
14, 開発現場で役に立つSwiftのクロージャの使い方
15, Swiftでwhileを使って上手に繰り返し処理を行おう
16, Swiftで文字列の長さをチェックするのにlengthを使ってみよう
17, Swiftのdictionaryの使い方と初期化方法をまとめました
18, Swiftの値渡しと参照渡しに関するまとめ
19, Swiftで参照渡ししたい時のinoutの便利な使い方
20, Swiftでfor-in文でindexを使いたい時の方法まとめ
21, Swiftでのクラスとstruct(構造体)の使い分けを解説します

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます

案件探しやフリーランスになるための相談する