Estensioni dei protocolli e dei tipi a confronto
Confronti le estensioni dei protocolli (aggiungono implementazioni predefinite a un protocollo, anche in modo condizionale) con le estensioni dei tipi (aggiungono API a un singolo tipo concreto). Comprenda il comportamento del dispatch e dei vincoli.
Estensioni dei protocolli e dei tipi a confronto è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 2 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.
Panoramica
Obiettivo: sapere quando utilizzare un'estensione di protocollo (comportamento predefinito per tutti i tipi conformi) rispetto a un'estensione di tipo (API per un singolo tipo concreto). Verranno inoltre illustrate le regole di dispatch.
Protocollo e conformità
I protocolli dichiarano i requisiti. I tipi diventano conformi implementando tali requisiti.
protocol Greeter {
func greet() -> String
}
struct Person: Greeter {
var name: String
func greet() -> String { "Hi, I'm \\(name)" } // concrete requirement impl
}
print(Person(name: "Ada").greet())Implementazioni predefinite tramite estensioni di protocollo
Un'estensione di protocollo può fornire implementazioni predefinite utilizzate da tutti i tipi conformi, a meno che questi non ne forniscano una propria.
protocol Describable {
func describe() -> String
}
extension Describable {
// default for ALL conformers until they override
func describe() -> String { "No description" }
}
struct Car: Describable { } // uses default
struct Book: Describable {
func describe() -> String { "A book" } // custom override
}
print(Car().describe(), Book().describe())API nelle estensioni di tipo
Le estensioni di tipo aggiungono metodi e proprietà calcolate a un singolo tipo concreto. Non aggiungono proprietà memorizzate.
struct Point { var x: Int; var y: Int }
extension Point {
// add helper just to Point
var lengthSquared: Int { x*x + y*y }
func moved(dx: Int, dy: Int) -> Point { Point(x: x+dx, y: y+dy) }
}
let p = Point(x: 2, y: 3)
print(p.lengthSquared, p.moved(dx: 1, dy: -1))Estensioni condizionali
Aggiunga comportamento ad alcuni tipi conformi utilizzando una clausola where nell'estensione di protocollo.
protocol Summable { }
extension Int: Summable { }
extension Array where Element: Summable {
// only for arrays whose elements conform to Summable
func joinedCount() -> Int { self.count }
}
print([1,2,3].joinedCount()) // works (Int conforms)
// print(["a","b"].joinedCount()) // not availableComportamento del dispatch (panoramica)
Regola generale: se un metodo è un requisito di protocollo e un tipo conforme lo implementa, prevale quest'ultimo (in modo simile al dispatch dinamico). I metodi aggiunti solo in un'estensione di protocollo, e non dichiarati come requisiti, usano il dispatch statico.
protocol Speaker { func speak() -> String }
extension Speaker { func speak() -> String { "default" } }
struct Cat: Speaker { }
struct Dog: Speaker {
func speak() -> String { "woof" } // requirement impl overrides default
}
let s1: Speaker = Cat()
let s2: Speaker = Dog()
print(s1.speak()) // "default" (uses default impl)
print(s2.speak()) // "woof" (Dog provides requirement impl)
let c = Cat()
print(c.speak()) // "default" via extension on protocolEstensione di protocollo o di tipo
Verifica rapida: qual è la differenza fondamentale?
Riepilogo
Riepilogo: utilizzi le estensioni di protocollo per impostazioni predefinite riutilizzabili, eventualmente condizionali. Utilizzi le estensioni di tipo per ampliare un singolo tipo. Ricordi il dispatch: le implementazioni del requisito prevalgono sui metodi predefiniti dell'estensione.
Domande Frequenti
La lezione «Estensioni dei protocolli e dei tipi a confronto» è gratuita?
Sì — il testo completo di «Estensioni dei protocolli e dei tipi a confronto» è 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 «Estensioni dei protocolli e dei tipi a confronto»?
Confronti le estensioni dei protocolli (aggiungono implementazioni predefinite a un protocollo, anche in modo condizionale) con le estensioni dei tipi (aggiungono API a un singolo tipo concreto). Com… 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 2 di 3.
Quanto tempo richiede la lezione «Estensioni dei protocolli e dei tipi a confronto»?
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
- Basi di protocolli ed estensioni
- Estensioni dei protocolli e dei tipi a confronto
- Requisiti statici e di istanza