Iteratori personalizzati e suggerimenti sulle prestazioni
Implementi iteratori e sequenze personalizzati mantenendoli efficienti: comportamento a passaggio singolo, assenza di allocazioni aggiuntive e utilizzo di viste lazy.
Iteratori personalizzati e suggerimenti sulle prestazioni è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 3 di 3. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 3 lezioni in totale.
Iteratori personalizzati 101
Crei il proprio IteratorProtocol e la propria Sequence. Gli iteratori sono generalmente a passaggio singolo e devono restituire nil alla fine.
Esempio di IteratorProtocol
Implementi next() per produrre un elemento a ogni chiamata e avanzare lo stato; restituisca nil al termine.
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("")Wrapper di Sequence
Una Sequence fornisce makeIterator(). A questo punto può usare for-in, map, filter e così via.
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("")Scorciatoia AnyIterator
AnyIterator/AnySequence consentono di creare rapidamente iteratori con una closure, una soluzione utile per generatori leggeri.
// 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("")Lazy per risparmiare lavoro
Preferisca .lazy quando è necessaria solo una parte della pipeline: consente di risparmiare allocazioni e lavoro.
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)Suggerimenti sulle prestazioni
Suggerimenti:
- Mantenga semplici gli iteratori: faccia avanzare lo stato e restituisca
nilalla fine. - Usi .lazy per evitare array intermedi.
- Riservi capacità per i risultati quando ne conosce la dimensione (
res.reserveCapacity(n)). - Preferisca gli algoritmi di Collection quando sono necessari più passaggi o gli indici.
Regola dell'iteratore
Verifica rapida: che cosa deve fare next() alla fine dell'iterazione?
Riepilogo
Riepilogo: scriva un IteratorProtocol minimale, lo racchiuda in una Sequence e mantenga efficienti le pipeline con .lazy e la preallocazione quando possibile.
Domande Frequenti
La lezione «Iteratori personalizzati e suggerimenti sulle prestazioni» è gratuita?
Sì — il testo completo di «Iteratori personalizzati e suggerimenti sulle prestazioni» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 3 lezioni in totale.
Cosa imparerò in «Iteratori personalizzati e suggerimenti sulle prestazioni»?
Implementi iteratori e sequenze personalizzati mantenendoli efficienti: comportamento a passaggio singolo, assenza di allocazioni aggiuntive e utilizzo di viste lazy. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Swift Academy?
Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 3.
Quanto tempo richiede la lezione «Iteratori personalizzati e suggerimenti sulle prestazioni»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Swift Academy?
Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Gerarchie Sequence/Collection
- Map/Filter/Reduce, sequenze lazy
- Iteratori personalizzati e suggerimenti sulle prestazioni