Iterator khusus & kiat performa
Implementasikan iterator/sequence khusus dan jaga efisiensinya: perilaku satu lintasan, hindari alokasi tambahan, serta gunakan tampilan lazy.
Iterator khusus & kiat performa adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 3 pelajaran total.
Pengiterasi khusus 101
Buat IteratorProtocol dan Sequence Anda sendiri. Pengiterasi biasanya hanya berjalan dalam satu lintasan dan harus mengembalikan nil di akhir.
Contoh IteratorProtocol
Implementasikan next() untuk menghasilkan satu elemen pada setiap pemanggilan dan memajukan status; kembalikan nil untuk mengakhiri.
struct CountdownIterator: IteratorProtocol {
var current: Int
mutating func next() -> Int? {
guard current >= 0 else { return nil }
defer { current -= 1 } // advance state
return current
}
}
var it = CountdownIterator(current: 3)
while let n = it.next() { print(n, terminator: " ") } // 3 2 1 0
print("")Pembungkus Sequence
Sequence menyediakan makeIterator(). Kini Anda dapat menggunakan for-in, map, filter, dan sebagainya.
struct Countdown: Sequence {
let start: Int
func makeIterator() -> CountdownIterator {
CountdownIterator(current: start)
}
}
for n in Countdown(start: 5) {
print(n, terminator: " ") // 5 4 3 2 1 0
}
print("")Pintasan AnyIterator
AnyIterator/AnySequence memungkinkan Anda membuat pengiterasi dengan cepat menggunakan fungsi penutup—berguna untuk pembangkit ringan.
// Build an iterator from a closure
var i = 1
let anyIt = AnyIterator<Int> {
guard i <= 3 else { return nil }
defer { i += 1 }
return i * 10
}
let numbers = AnySequence(anyIt)
for x in numbers { print(x, terminator: " ") } // 10 20 30
print("")Gunakan lazy untuk menghemat pekerjaan
Utamakan .lazy saat hanya sebagian alur pemrosesan yang diperlukan; cara ini menghemat alokasi dan pekerjaan.
let big = Array(1...10_000)
// Eager: builds two intermediate arrays
let eager = big.map { $0 * 2 }.filter { $0 % 3 == 0 }
// Lazy: no temporaries; work is done during collection
let lazyView = big.lazy.map { $0 * 2 }.filter { $0 % 3 == 0 }
let result = Array(lazyView.prefix(5)) // only first 5 actually computed
print(result)Kiat kinerja
Kiat:
- Buat pengiterasi tetap sederhana—majukan status dan kembalikan
nildi akhir. - Gunakan .lazy untuk menghindari larik perantara.
- Sisakan kapasitas untuk hasil jika Anda mengetahui ukurannya (
res.reserveCapacity(n)). - Utamakan algoritme Collection saat Anda memerlukan lintasan berulang atau indeks.
Aturan pengiterasi
Pemeriksaan singkat: Apa yang harus dilakukan next() di akhir iterasi?
Ringkasan
Ringkasan: Tulis IteratorProtocol minimal, bungkus dalam Sequence, dan jaga efisiensi alur pemrosesan dengan .lazy serta praalokasi jika memungkinkan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Iterator khusus & kiat performa” gratis?
Ya — teks lengkap “Iterator khusus & kiat performa” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 3 pelajaran total.
Apa yang akan aku pelajari di “Iterator khusus & kiat performa”?
Implementasikan iterator/sequence khusus dan jaga efisiensinya: perilaku satu lintasan, hindari alokasi tambahan, serta gunakan tampilan lazy. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Swift Academy?
Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 3.
Berapa lama pelajaran “Iterator khusus & kiat performa” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Hierarki Sequence/Collection
- Map/Filter/Reduce, sequence malas
- Iterator khusus & kiat performa