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でできることが増えました😄
よかったですね。