コレクション全体を繰り返し処理する場合は、for <element> in <collection>
構文を使用します。
for element in arr {
// do something with element
}
あなたはまた、あなたがenumerate()
を使用することができ、各反復で要素のインデックスにアクセスする必要がある場合。インデックスはゼロベースなので、インデックスの範囲は0..<arr.count
です。
for (index, element) in arr.enumerate() {
// do something with index & element
// if you need the position of the element (1st, 2nd 3rd etc), then do index+1
let position = index+1
}
あなたはいつも(1..<arr.count+1
の範囲を取得するための)位置にアクセスするために、各反復でインデックスに1を追加することができます。
これらのどれもあなたの問題を解決しない場合は、あなたの配列のインデックスを反復処理する範囲0..<arr.count
を使用することができ、または@vacawama saysとして、あなたはポジションを反復する範囲1..<arr.count+1
を使用することができます。
for index in 0..<arr.count {
// do something with index
}
for position in 1..<arr.count+1 {
// do something with position
}
0..<0
0..<0
がちょうど空範囲であり、そして1..<1
も空の範囲であるよう1..<arr.count+1
が空の配列のためにクラッシュすることができないように空の配列のためにクラッシュすることができません。
@vacawama's comment belowも参照してください。stride
を安全に使用してより多くのカスタム範囲を作成できます。例えば(スイフト2構文):
let startIndex = 4
for i in startIndex.stride(to: arr.count, by: 1) {
// i = 4, 5, 6, 7 .. arr.count-1
}
スウィフト3構文:startIndex
は、AT範囲を開始する数である
for i in stride(from: 4, to: arr.count, by: 1) {
// i = 4, 5, 6, 7 .. arr.count-1
}
これは、arr.count
は、範囲は以下滞在する数であります1
がストライド長です。配列の要素が指定された開始インデックスより少ない場合、ループは決して入力されません。
を読ん
が、慎重に、きっとあなたは '0 ..
Hamish
...と使用すると、' 0 .. <0'は空の範囲なので、ループ本体が入力されないので問題は解決します。 – vacawama
...それは基本的にSwiftマニュアルの2ページ目です:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html#//apple_ref/doc/uid/TP40014097 -CH6-ID60 – Eiko