スライドショー

【Swift入門】Swift3.x版でのfor文、for-in文の使い方まとめ

Swiftは3.x系になってから、for文の従来のC言語スタイルの書き方が削除されました。

この記事ではfor文、for-in文について、

・Swift3での変更点
・for文、for-in文の基本的な使い方

などの基本的な解説から、

・配列の要素分ループする方法
・Dictionary(ディクショナリ)型のループ
・String型のループ

などの応用的な使い方についても解説していきます。

ここでは、Swift3.0からの新しいfor文、for-in文の書き方についてまとめていますので、ぜひ参考にしてくださいね!

※この記事ではSwift3.1を使用しています。

for文、for-in文の基本的な使い方

for文とは条件が真の場合に処理を繰り返すループ処理となります。

主に指定した回数分ループで処理を繰り返したときに使用します。

Swiftではfor文では、Swift3.0でC言語のスタイルの記述方式が削除されました。

そのため、以下のようなfor文はSwift3.0より使用できなくなります。

Swfit2.0のfor文:

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

同様の記述を行うにはfor-in文を使用する必要があります。

昇順ループ

先述した従来のようにC言語スタイルのようにfor文を記述する場合はfor-in文を使用して、以下のように記述します。

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

実行結果:

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

今までの標準的なfor文の書き方に慣れていると、馴染みが薄い書き方となってしまいますが、「for i in 0..<5 」の書き方で同様の処理が可能であることを覚えておきましょう!

降順ループ

降順でループするにはreversedを使用します。

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

実行結果:

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

配列の要素分ループする

配列の要素数分ループするには、配列に対してcountを使用してループするのがSwift2までの書き方でした。

しかし、さきほど説明したように以下ようなC言語スタイルでの記述方式が削除されたため、countを使用することはできません。

let fruits =  ["apple", "orange", "melon", "banana"]
for var i = 0; i < fruits.count; i++ {
    if (i % 2) != 0 {
        print("\(fruits[i])")
    }
}

Swift3.0でこのサンプルプログラムを実行すると、以下のようなエラーとなります。

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

そのため、配列もfor-in文を使用して以下のように記述します。

let fruits =  ["apple", "orange", "melon", "banana"]
for value in fruits {
    print("\(value)")
}

実行結果:

apple
orange
melon
banana

また、enumeratedstrideを使用して配列をループする方法もあります。

enumeratedで配列のループ

enumeratedを使用すると配列のindexを取得することができます。

書き方:

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

enumeratedを指定すれば、index番号に0からの番号が入り、値にはindex番号に対応した値が入ります。

let fruits = ["apple", "orange", "melon", "banana"]
for (index, value) in fruits.enumerated() {
    print("\(value)") 
}

実行結果:

apple
orange
melon
banana

strideで配列のループ

for-in文で配列をループするには、strideを使用する方法もあります。

書き方:

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

strideを使用すれば開始位置、終了位置、間隔が設定できますので、配列のindex番号0,3.5のように間隔を開けて値を取得することもできます。

let fruits = ["apple", "orange", "melon", "banana"]
for i in stride(from: 0, to: fruits.count, by: 1) {
    print("\(fruits[i])")
}

実行結果:

apple
orange
melon
banana

Dictionary(ディクショナリ)型のループ

Dictionary(ディクショナリ)とはキーと値をセットにした配列で、PHPの連想配列のようなもです。

キーに紐づく値をセットできるため、ディクショナリ(辞書)とも言います。

以下にDictionary型のキーと値をfor-in文で取得するサンプルプログラムを紹介します。

let fruits = ["apple": 100, "orange": 80, "melon": 700, "banana": 150, "pineapple": 450]

for (key,value) in fruits {
    print("\(key)は\(value)円です。")
}

実行結果:

appleは100円です。
bananaは150円です。
melonは700円です。
pineappleは450円です。
orangeは80円です。

String型のループ

for-in文を使用すれば、「文字列.characters」でString型の文字列を1文字ずつ取り出すことが可能です。

文字列を1文字ずつ取り出す方法を以下に記述します。

let str = "Samurai"
for char in str.characters {
    print(char)
}
S
a
m
u
r
a
i

まとめ

ここではSwift3.x系のfor文、for-in文に関して、

・Swift3での変更点
・for文、for-in文の基本的な使い方
・配列の要素分ループする方法
・Dictionary(ディクショナリ)型のループ
・String型のループ

などについて解説しました。

for文の言語使用がSwift3.0にバージョンアップしてから大きく代わりました。

しかし、新しい書き方になれてくると、今までのfor文の書き方が冗長であることもわかります。

もし、for文、for-in文の書き方を忘れてしまったら、この記事を思い出してくださいね!

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

ヤマシタ

システムエンジニアとして10年勤務→フリーランスへ。現在は侍ブログ編集部としてこれまでに200記事以上の記事を執筆。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。