Diperbarui untuk Swift 3
Jawaban di bawah ini adalah ringkasan dari opsi yang tersedia. Pilih salah satu yang paling sesuai dengan kebutuhan Anda.
reversed
: angka dalam suatu rentang
Meneruskan
for index in 0..<5 {
print(index)
}
// 0
// 1
// 2
// 3
// 4
Ke belakang
for index in (0..<5).reversed() {
print(index)
}
// 4
// 3
// 2
// 1
// 0
reversed
: elemen dalam SequenceType
let animals = ["horse", "cow", "camel", "sheep", "goat"]
Meneruskan
for animal in animals {
print(animal)
}
// horse
// cow
// camel
// sheep
// goat
Ke belakang
for animal in animals.reversed() {
print(animal)
}
// goat
// sheep
// camel
// cow
// horse
reversed
: elemen dengan indeks
Terkadang indeks diperlukan saat iterasi melalui koleksi. Untuk itu Anda dapat menggunakan enumerate()
, yang mengembalikan tupel. Elemen pertama dari tuple adalah indeks dan elemen kedua adalah objek.
let animals = ["horse", "cow", "camel", "sheep", "goat"]
Meneruskan
for (index, animal) in animals.enumerated() {
print("\(index), \(animal)")
}
// 0, horse
// 1, cow
// 2, camel
// 3, sheep
// 4, goat
Ke belakang
for (index, animal) in animals.enumerated().reversed() {
print("\(index), \(animal)")
}
// 4, goat
// 3, sheep
// 2, camel
// 1, cow
// 0, horse
Perhatikan bahwa seperti yang dicatat Ben Lachman dalam jawabannya , Anda mungkin ingin melakukan .enumerated().reversed()
alih - alih .reversed().enumerated()
(yang akan membuat angka indeks meningkat).
melangkah: angka
Langkahnya adalah cara untuk beralih tanpa menggunakan rentang. Ada dua bentuk. Komentar di akhir kode menunjukkan seperti apa versi jangkauan (dengan asumsi ukuran kenaikan adalah 1).
startIndex.stride(to: endIndex, by: incrementSize) // startIndex..<endIndex
startIndex.stride(through: endIndex, by: incrementSize) // startIndex...endIndex
Meneruskan
for index in stride(from: 0, to: 5, by: 1) {
print(index)
}
// 0
// 1
// 2
// 3
// 4
Ke belakang
Mengubah ukuran kenaikan untuk -1
memungkinkan Anda untuk mundur.
for index in stride(from: 4, through: 0, by: -1) {
print(index)
}
// 4
// 3
// 2
// 1
// 0
Perhatikan to
dan through
perbedaan.
langkahnya: elemen SequenceType
Maju dengan selisih 2
let animals = ["horse", "cow", "camel", "sheep", "goat"]
Saya menggunakan 2
dalam contoh ini hanya untuk menunjukkan kemungkinan lain.
for index in stride(from: 0, to: 5, by: 2) {
print("\(index), \(animals[index])")
}
// 0, horse
// 2, camel
// 4, goat
Ke belakang
for index in stride(from: 4, through: 0, by: -1) {
print("\(index), \(animals[index])")
}
// 4, goat
// 3, sheep
// 2, camel
// 1, cow
// 0, horse
Catatan