Swift 3では、典型的なCスタイルのforループからいくつかの変更がありました。私はそれを回避しようとしていますが、多くの場合以前より多くのコードを書いているようです。私が望むものなので、誰かが私を正しい方向に向けることができるかもしれません:配列の最後のインデックス以外のすべてを反復する
かなり簡単なもの。私はインデックスを取得することができるのが好きで、names.count == 0.の場合はforループが実行されないようにします。
しかし、Swift 3の私のオプションが私にこれを許可していないようです。私は0 ... 0 {}
に私のために:
let names : [String] = ["Jim", "Jenny", "Earl"]
if names.count > 0 {
for i in 0...(names.count - 1) {
NSLog("%@ loves %@", names[i], names[i+1])
}
}
私のプログラムは、それが読み込み状況でクラッシュしてしまいますので、スタート時のステートメントが必要な場合は、ザ・:私のような何かをしなければならないでしょうまた、単に明示的にインデックスを設定せずにすべてを反復処理することができるという考え方のように:
// Pseudocode
for name in names.exceptLastOne {
NSLog("%@ loves %@", name, name.plus(1))
}
すべての私の欲求をミックス構文のいくつかの並べ替えがあるように私は感じるが、私はまだそれに遭遇していません。誰かが方法を知っていますか?あるいは少なくとも私のコードをもっとコンパクトにする方法?
UPDATE:
for (index, name) in names.enumerated {}
ハミッシュの回答と比較すると、これに伴う問題があることである:誰かがこの質問はすでに解決策が度に何かを使用していたところSO投稿を引用し、求められていることが示唆されました現在の名前のインデックスのみが与えられています。それで私はインデックスの値をインデックスのようにする必要はありません。
names[index + 1]
これは、追跡する余分な変数の1つです。私が好むあるハミッシュさん:
for i in names.indices.dropLast() {
print("\(names[i]) loves \(names[i + 1])")
}
、ショートシンプル、そして名前だけのトラックと私ではなく、名前、インデックス、および名前を維持する必要があります。
[swift for loop:インデックスでは配列内の要素ですか?](http://stackoverflow.com/questions/24028421/swift-for-loop-index-element-in-array) – dasblinkenlight
'名前の名前。dropLast(){' –
@LeoDabusしかし、OPは各反復中に配列から2つの異なるオブジェクトにアクセスする必要があります。 – rmaddy