LoginSignup
1
1

More than 3 years have passed since last update.

【Swift】stride()を使ってループを逆に回したり、増分を任意の値にしたりしよう

Last updated at Posted at 2020-02-25

stride()についての覚書です。
なんとなく使っていたので、改めてちゃんと調べました。

ループを逆に回したい!!!!!!!

for i in stride(from: 10, to: 0, by: -1) {
    print("countdown:", i)
}

/* 出力
countdown: 10
countdown: 9
countdown: 8
countdown: 7
countdown: 6
countdown: 5
countdown: 4
countdown: 3
countdown: 2
countdown: 1 //0は出力しない
*/

後述しますが、stride(from:to:by:)だと終了条件に指定した数は含まれません。
stride(from:through:by:)を使うと、0まで出せます。

増分を任意の値にしたい

for i in stride(from: 0, to: 30, by: 3) {
    print("3の倍数のときだけ出力します……:", i)
}

/* 出力
3の倍数のときだけ出力します……: 0
3の倍数のときだけ出力します……: 3
3の倍数のときだけ出力します……: 6
3の倍数のときだけ出力します……: 9
3の倍数のときだけ出力します……: 12
3の倍数のときだけ出力します……: 15
3の倍数のときだけ出力します……: 18
3の倍数のときだけ出力します……: 21
3の倍数のときだけ出力します……: 24
3の倍数のときだけ出力します……: 27
*/

toとthroughの違い

stride()を使うと、StrideTo/StrideThroughという見慣れないクラスを返します。
イメージ的にはStrideToがS..<Eで、StrideThroughがS...Eです。
ただRangeオブジェクトと違って、Strideableなオブジェクトは増分情報を持っているので、クラスとして完全に別モノとして言語設計されているみたいです。

StrideTo/StrideThroughはそれぞれイニシャライザがなく、stride()メソッドを呼び出してインスタンス化するように、とのことです。

また一つSwiftでできることが増えました😄
よかったですね。

公式

stride(from:to:by:)
stride(from:through:by:)

1
1
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
1
1