Conformità condizionali
Renda un tipo generico conforme a un protocollo solo se il relativo parametro di tipo soddisfa i vincoli (ad esempio, Box<T>: Equatable where T: Equatable ).
Conformità condizionali è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 1 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é la conformità condizionale?
La conformità condizionale aggiunge la conformità a un protocollo solo quando i parametri del tipo soddisfano determinati vincoli. In questo modo le API sono più precise, si evita il codice ripetitivo e si sfrutta meglio la composizione con la libreria standard.
Base del tipo generico
Inizia con un tipo generico. Senza lavoro aggiuntivo, Box non è conforme a Equatable/Hashable, anche se lo è T.
struct Box<T> {
var value: T
}
let bi = Box(value: 3)
let bs = Box(value: "hi")
// At this point Box has no Equatable/Hashable, regardless of T.Equatable in modo condizionale
Aggiungi Equatable solo se T: Equatable. Il codice che confronta box di tipi non-Equatable non verrà compilato (una protezione utile).
extension Box: Equatable where T: Equatable {
static func == (lhs: Box<T>, rhs: Box<T>) -> Bool {
lhs.value == rhs.value
}
}
print(Box(value: 5) == Box(value: 5)) // true
// Works because Int is Equatable
// print(Box(value: someNonEquatable) == ...) // won't compileHashable in modo condizionale
Analogamente, adotta Hashable solo quando l'elemento è Hashable. In questo modo Set/Dictionary funzionano con Box<T>.
extension Box: Hashable where T: Hashable {
func hash(into hasher: inout Hasher) {
hasher.combine(value)
}
}
let set: Set<Box<Int>> = [Box(value: 1), Box(value: 1)]
print(set.count) // 1 because Hashable is available only when T: HashableLimitare le funzionalità con where
Usa extension ... where per esporre metodi solo per determinate capacità (ad esempio, T: Numeric), mantenendo ridotta l'API di base.
// Add extra APIs only when T supports them
extension Box where T: Numeric {
func doubled() -> T { value + value }
}
print(Box(value: 7).doubled()) // 14 (Int is Numeric)
// Box(value: "hi").doubled() // won't compile — String not NumericPresente nella libreria standard
Lo usi già ogni giorno:
- Array: Equatable solo quando
Element: Equatable. - Hashing di Dictionary/Set solo quando le chiavi o gli elementi sono
Hashable. - Uguaglianza di Optional solo quando
Wrapped: Equatable.
Vantaggio: API accurate e sicurezza verificata in fase di compilazione.
Verifica della definizione
Verifica rapida: cosa permette la conformità condizionale?
Riepilogo
Riepilogo: usa extension Type: Protocol where ... per aggiungere conformità e API solo quando i vincoli sono soddisfatti. In questo modo il codice rimane preciso, sicuro e facile da comprendere.
Domande Frequenti
La lezione «Conformità condizionali» è gratuita?
Sì — il testo completo di «Conformità condizionali» è 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 «Conformità condizionali»?
Renda un tipo generico conforme a un protocollo solo se il relativo parametro di tipo soddisfa i vincoli (ad esempio, Box<T>: Equatable where T: Equatable ). 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 1 di 3.
Quanto tempo richiede la lezione «Conformità condizionali»?
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