LoginSignup
0
2

More than 3 years have passed since last update.

[Swift]2以上の刻みで増加させるforのループ方法

Last updated at Posted at 2019-08-27

はじめに

Objctive-CからSwiftへ書き換える上で、forの使い方が大きく変化しています。
インデックス情報が不要ならば、for-inの使いかたはそれほど変わっていないのでObjective-CやJavaなどの経験があればとくに困ることはないと思います。

しかし、インデックス情報が必要になる場合は、Swiftのお作法を覚える必要がでてきたので、備忘録として残しておきます。
なお環境は、Xcode10.2.1です。

1ずつ増加する

for (i, value) in 0..<10.enumerated() {
}

ちなみに、dropfirst()で作成された配列には、元のインデックス情報が残っているので、インデックス情報を合わせるためにzip()を使用する必要があります。

1以外の数値を増加する

Objective-Cなどの伝統的なforの記載で、1以外の値を増加させる方法は以下のようなやり方です。

// 伝統的なforの記述方法はSwiftでは使えない!
// 2づつ増加させる
for (int i=0; i < 10; i * 2) {
}

しかしSwiftではどうやってこれを実現するのでしょうか。
その方法は、stride()を使用します。ちなみにstrideの意味は「大股に歩く」だそうです。ナイスネーミング!

stride()で開区間( < )と閉区間( <= )はどうすればいいのでしょうか。
toではなくthroughに変更します。

含めない場合 ( < )

for i in stride(from: 0, to: 10, by: 2) {
    print("index=\(i)") // 0, 2, 4, 6, 8
}

含めたい場合 ( <=)

for i in stride(from: 0, through: 10, by: 2) {
    print("index=\(i)") // 0, 2, 4, 6, 8, 10
}

参照

Control Flow — The Swift Programming Language (Swift 5.1)

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2