1. ホーム
  2. アイオス

[解決済み】swiftでforループを逆順に反復する方法は?

2022-04-08 05:16:27

質問

プレイグラウンドでforループを使用する際、forループの最初のパラメータを最高値に変更するまでは、すべてがうまくいっていました。(降順で反復されます)

これはバグなのでしょうか?他に誰か同じような人はいましたか?

for index in 510..509
{
    var a = 10
}

実行される反復回数を表示するカウンターが回り続けている...。

解決方法は?

Xcode 6 beta 4では、1つ以外のステップを持つ範囲を反復処理するための2つの関数が追加されました。 stride(from: to: by:) これは排他的範囲に使用され stride(from: through: by:) これは、包括的な範囲に使用されます。

範囲を逆順に反復する場合は、以下のように使用します。

for index in stride(from: 5, to: 1, by: -1) {
    print(index)
}
//prints 5, 4, 3, 2

for index in stride(from: 5, through: 1, by: -1) {
    print(index)
}
//prints 5, 4, 3, 2, 1

なお、どちらも Range メンバー関数です。これらはグローバル関数で StrideTo または StrideThrough 構造体とは異なる定義がされています。 Range 構造体を使用します。

この回答の以前のバージョンでは by() のメンバ関数です。 Range 構造体であり、ベータ 4 で削除されました。どのように動作していたかを知りたい場合は、編集履歴を確認してください。