Clausole where sulle estensioni
Utilizzi where sulle estensioni di tipo e di protocollo per aggiungere API solo quando i vincoli sono soddisfatti (ad esempio, Array where Element: Equatable , Collection where Element == Int ).
Clausole where sulle estensioni è 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.
Perché le estensioni vincolate?
Aggiungi API solo quando i tipi soddisfano determinati vincoli, usando where nelle estensioni:
- Estensioni di tipo (ad esempio,
Array) - Estensioni di protocollo (ad esempio,
Collection) - Vincoli di corrispondenza esatta (ad esempio,
Element == Int)
Estensione di un tipo con vincolo
Associa metodi a Array solo quando il suo Element è Equatable. Gli array non-Equatable non avranno accesso a queste API.
extension Array where Element: Equatable {
func removing(_ value: Element) -> [Element] {
filter { $0 != value }
}
func containsAll(_ others: [Element]) -> Bool {
others.allSatisfy(self.contains)
}
}
print([1,2,3].removing(2)) // [1,3]
print(["a","b"].containsAll(["b"])) // trueEstensione di un protocollo con where
Un'estensione di protocollo aggiunge un'API a tutti i tipi conformi quando il vincolo è soddisfatto (in questo caso, a qualsiasi Collection i cui elementi siano Comparable).
extension Collection where Element: Comparable {
var isSorted: Bool {
// Pair each element with the next; ensure non-decreasing order
zip(self, dropFirst()).allSatisfy(<=)
}
}
print([1,2,3].isSorted) // true
print([3,1,2].isSorted) // falseVincoli di corrispondenza esatta
Usa i vincoli di uguaglianza per API mirate, ad esempio solo quando Element == Int. Queste API non saranno disponibili per altri tipi di elemento.
extension Collection where Element == Int {
var sum: Int { reduce(0, +) }
func average() -> Double {
isEmpty ? 0 : Double(sum) / Double(count)
}
}
print([1,2,3].sum) // 6
print([1,2,3].average()) // 2.0API basate sulle capacità
Definisci i vincoli in base alle capacità (protocolli come Numeric e Hashable) per comporre helper potenti e riutilizzabili.
extension Collection where Element: Numeric {
var total: Element { reduce(0, +) }
}
extension Sequence where Element: Hashable {
var uniques: [Element] {
var seen = Set<Element>()
return filter { seen.insert($0).inserted }
}
}
print([1,2,2,3].uniques) // [1,2,3]
print([1,2,3].total) // 6Note di progettazione
Suggerimenti:
- Preferisca vincoli minimi per favorire un riutilizzo più ampio.
- Eviti estensioni sovrapposte che definiscono lo stesso membro: possono confondere la risoluzione degli overload.
- Documenti le ipotesi (ordinamento, unicità, domini numerici).
Scopo delle estensioni vincolate
Verifica rapida: che cosa consentono di fare le estensioni vincolate?
Riepilogo
Riepilogo: usi where sulle estensioni di tipi o protocolli per indirizzare con precisione le API, in base a una capacità (: Comparable) o a un tipo esatto (== Int), mantenendo il codice sicuro e facilmente esplorabile.
Domande Frequenti
La lezione «Clausole where sulle estensioni» è gratuita?
Sì — il testo completo di «Clausole where sulle estensioni» è 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 «Clausole where sulle estensioni»?
Utilizzi where sulle estensioni di tipo e di protocollo per aggiungere API solo quando i vincoli sono soddisfatti (ad esempio, Array where Element: Equatable , Collection where Element == Int ). 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 «Clausole where sulle estensioni»?
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
- Conformità condizionali
- Vincoli ricorsivi e generics di ordine superiore
- Clausole where sulle estensioni