はじめに
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
}