Swift Academy · Leçon

Extensions de protocoles contre extensions de types

Comparez les extensions de protocoles (ajout d’implémentations par défaut à un protocole, même sous conditions) aux extensions de types (ajout d’API à un type concret). Comprenez le comportement de la distribution et les contraintes.

Leçon 2 sur 38 étapes

Extensions de protocoles contre extensions de types est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 3. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 3 leçons au total.

Vue d’ensemble

Objectif : savoir quand utiliser une extension de protocole (comportement par défaut pour tous les types conformes) plutôt qu’une extension de type (API pour un type concret donné). Nous examinerons également les règles de distribution des appels.

Protocole et conformité

Les protocoles déclarent des exigences. Les types s’y conforment en implémentant ces exigences.

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())

Implémentations par défaut via une extension de protocole

Une extension de protocole peut fournir des implémentations par défaut utilisées par tous les types conformes, sauf si ceux-ci fournissent leur propre implémentation.

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 des extensions de type

Les extensions de type ajoutent des méthodes ou des propriétés calculées à un type concret unique. Elles n’ajoutent pas de propriétés stockées.

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))

Extensions conditionnelles

Ajoutez un comportement à certains types conformes en utilisant une clause conditionnelle sur l’extension de protocole.

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 available

Comportement de la distribution des appels (vue d’ensemble)

Règle générale : si une méthode constitue une exigence de protocole et qu’un type conforme l’implémente, cette implémentation est prioritaire, avec un comportement similaire à la liaison dynamique. Les méthodes ajoutées uniquement dans une extension de protocole, et qui ne sont pas des exigences, utilisent une liaison statique.

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 protocol

Extension de protocole ou de type

Vérification rapide : quelle est la différence essentielle ?

Récapitulatif

Récapitulatif : utilisez les extensions de protocole pour fournir des comportements par défaut réutilisables, éventuellement conditionnels. Utilisez les extensions de type pour enrichir un type donné. N’oubliez pas la distribution des appels : les implémentations d’exigences remplacent les méthodes par défaut des extensions.

Gratuit pour commencer

Apprends Swift avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
122
Leçons
409

Questions Fréquemment Posées

La leçon « Extensions de protocoles contre extensions de types » est-elle gratuite ?

Oui — le texte complet de « Extensions de protocoles contre extensions de types » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 3 leçons au total.

Qu'est-ce que j'apprendrai dans « Extensions de protocoles contre extensions de types » ?

Comparez les extensions de protocoles (ajout d’implémentations par défaut à un protocole, même sous conditions) aux extensions de types (ajout d’API à un type concret). Comprenez le comportement de l… Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Swift Academy ?

Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 3.

Combien de temps prend la leçon « Extensions de protocoles contre extensions de types » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?

Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Notions de base sur les protocoles et les extensions
  2. Extensions de protocoles contre extensions de types
  3. Exigences statiques contre exigences d’instance
← Retour à Swift Academy