Swift 3.0では、以下の構文が有効ではない場合、どのようにデクリメントするインデックス付きループを表現しますか?スウィフトCスタイルのループが非推奨になった後のループ内のインデックスの減少
for var index = 10 ; index > 0; index-=1{
print(index)
}
// 10 9 8 7 6 5 4 3 2 1
Swift 3.0では、以下の構文が有効ではない場合、どのようにデクリメントするインデックス付きループを表現しますか?スウィフトCスタイルのループが非推奨になった後のループ内のインデックスの減少
for var index = 10 ; index > 0; index-=1{
print(index)
}
// 10 9 8 7 6 5 4 3 2 1
ここでは、より簡単で(よりスウィーティな)アプローチです。
for i in (0 ..< 5).reversed() {
print(i) // 4,3,2,1,0
}
let array = ["a", "b", "c", "d", "e"]
for element in array.reversed() {
print(element) // e,d,c,b,a
}
array.reversed().forEach { print($0) } // e,d,c,b,a
print(Array(array.reversed())) // e,d,c,b,a
Cスタイルは、固定増減とループstride()
によって置き換えることができる。
for index in 10.stride(to: 0, by: -1) {
print(index)
}
// 10 9 8 7 6 5 4 3 2 1
使用stride(to: ...)
又はstride(through: ...)
最後の要素が含まれるかしなければならない かどうかに応じ。
Swift 3の構文が変更されました( this answerを参照)。 whileループ
10.stride(through: 0, by: -1).forEach { print($0) }
またはクラシック:
あなたはstride
メソッドを使用することができます。 swift 3.0
から
、Strideable上stride(to:by:)
方法はフリー機能に置き換えられている、stride(from:to:by:)
for index in stride(from: 10, to: 0, by: -1){
print(index)
}
それでもこのCスタイルのループを使用したい場合は、ここでは何が必要です:
let x = 10
infix operator ..> { associativity left }
func ..>(left: Int, right: Int) -> StrideTo<Int> {
return stride(from: left, to: right, by: -1)
}
for i in x..>0 {
print(i)
}
これはSwift 1にあった方法です。もう何歳ですか? –
古典的なCスタイルのループを維持するだけではなく、ホイールを再発明するようなものです。 – DeividKamui