[解決済み] Swiftのリバースレンジ
質問
Swiftで逆レンジを扱う方法はありますか?
例えば
for i in 5...1 {
// do something
}
は無限ループです。
Swiftの新しいバージョンでは、そのコードはコンパイルされますが、実行時にエラーが発生します。
致命的なエラーです。upperBound < lowerBoundでRangeを形成することができません。
私は私が使用できることを知っている
1..5
の代わりに、計算する
j = 6 - i
を計算し
j
をインデックスとして使用します。もっと読みやすいものはないかと考えていたところです。
どのように解決するのですか?
最新のSwift 3へのアップデート(Swift 4ではまだ動作します。)
を使用することができます。
reversed()
メソッドを範囲
for i in (1...5).reversed() { print(i) } // 5 4 3 2 1
または
stride(from:through:by:)
メソッド
for i in stride(from:5,through:1,by:-1) { print(i) } // 5 4 3 2 1
stide(from:to:by:)
は似ていますが、最後の値を除いたものです。
for i in stride(from:5,to:0,by:-1) { print(i) } // 5 4 3 2 1
最新のSwift 2へのアップデート
まず、プロトコルの拡張により
reverse
がどのように使われるかが変わります。
for i in (1...5).reverse() { print(i) } // 5 4 3 2 1
Stride は Xcode 7 Beta 6 で作り直されました。新しい使い方は
for i in 0.stride(to: -8, by: -2) { print(i) } // 0 -2 -4 -6
for i in 0.stride(through: -8, by: -2) { print(i) } // 0 -2 -4 -6 -8
また
Doubles
:
for i in 0.5.stride(to:-0.1, by: -0.1) { print(i) }
ここでは、境界の浮動小数点比較に注意してください。
Swift 1.2用に初期に編集 : Xcode 6 Beta 4時点。 によって と 逆レンジ はもう存在しない :[
範囲を反転させるだけなら リバース 関数が必要です。
for i in reverse(1...5) { println(i) } // prints 5,4,3,2,1
投稿者 0x7fffffff 新しい ストライド が追加され、任意の整数の反復処理とインクリメントに使用できるようになりました。Apple はまた、浮動小数点のサポートが来ることを明言しています。
彼の回答からの出典です。
for x in stride(from: 0, through: -8, by: -2) {
println(x) // 0, -2, -4, -6, -8
}
for x in stride(from: 6, to: -2, by: -4) {
println(x) // 6, 2
}
関連
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] Swiftで#pragmaマーク?
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] Swiftの@selector()?
-
[解決済み] Swift Array - インデックスが存在するかどうかをチェックする
-
[解決済み] Swift 3でカスタム通知を作成するには?
-
[解決済み] クラス 'ViewController' は swift で初期化されません。
-
[解決済み] 既存のUIKitアプリケーションにSwiftUIビューを含める
-
[解決済み] Swiftスクリプトでターミナルコマンドを実行するには?(例:xcodebuild)
-
[解決済み] Swift: PREPROCESSORフラグ(`#if DEBUG`など)を使ってAPIキーを実装する方法とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】swiftでforループを逆順に反復する方法は?
-
[解決済み] swiftで改行なしの印刷をする
-
[解決済み] クラス 'ViewController' は swift で初期化されません。
-
[解決済み] Swift 3で現在の日付を取得する?[クローズド]
-
[解決済み] Swift 1.2では、宣言は「final」と「dynamic」の両方にはなり得ないというエラーがある
-
[解決済み] 既存のUIKitアプリケーションにSwiftUIビューを含める
-
[解決済み] Swiftで警告を消すには?
-
[解決済み] 非'@objc'メソッドは'@objc'プロトコルのオプション要件を満たしていない
-
[解決済み] Swiftで範囲を作成する方法は?
-
[解決済み] Swift: インデックスで文字列配列を置換する