Swift Academy · Leçon

Les protocoles comme contrats

Définissez des contrats de comportement indépendants des types.

Leçon 1 sur 413 étapes

Les protocoles comme contrats est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. 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 4 leçons au total.

Qu'est-ce qu'un protocole ?

Un protocole définit un modèle de méthodes, de propriétés et d'autres exigences qu'un type conforme doit implémenter. C'est un contrat : tout type qui l'adopte promet de fournir tout ce que le protocole déclare.

protocol Greetable {
    var name: String { get }
    func greet() -> String
}

Se conformer à un protocole

Un type se conforme à un protocole en l'adoptant et en fournissant chaque exigence. Ici, une structure satisfait à la fois la propriété name et la méthode greet().

protocol Greetable {
    var name: String { get }
    func greet() -> String
}

struct Person: Greetable {
    let name: String
    func greet() -> String { "Hello, I am " + name }
}

let p = Person(name: "Ada")
print(p.greet())

Exigences relatives aux propriétés

Les protocoles indiquent si une propriété doit être accessible en lecture ({ get }) ou accessible en lecture et en écriture ({ get set }). Une propriété stockée ou calculée peut satisfaire une exigence en lecture seule.

protocol Identifiable {
    var id: String { get }
}

struct User: Identifiable {
    let id: String
}

print(User(id: "u-1").id)

Exigences relatives aux méthodes

Les exigences d'une méthode indiquent son nom, ses paramètres et son type de retour, mais pas son corps. Les types conformes fournissent l'implémentation.

protocol Shape {
    func area() -> Double
}

struct Square: Shape {
    let side: Double
    func area() -> Double { side * side }
}

print(Square(side: 3).area())

Exigences de mutating

Pour les types valeur, les méthodes qui modifient self doivent être marquées mutating. Déclarez l'exigence avec mutating afin que les structures puissent la satisfaire.

protocol Toggleable {
    mutating func toggle()
}

struct Switch: Toggleable {
    var isOn = false
    mutating func toggle() { isOn.toggle() }
}

var s = Switch()
s.toggle()
print(s.isOn)

Les protocoles comme types

Un protocole est un type de premier ordre. Vous pouvez l'utiliser pour des variables, des paramètres et des valeurs de retour, en acceptant toute valeur conforme.

protocol Animal { func sound() -> String }
struct Dog: Animal { func sound() -> String { "Woof" } }
struct Cat: Animal { func sound() -> String { "Meow" } }

let animals: [Animal] = [Dog(), Cat()]
for a in animals { print(a.sound()) }

Polymorphisme grâce aux protocoles

L'appel d'une méthode de protocole est distribué vers le type concret qui se trouve derrière la valeur. Vous pouvez ainsi écrire du code qui fonctionne avec de nombreux types grâce à un seul contrat.

protocol Describable { func describe() -> String }
struct Book: Describable { let t: String; func describe() -> String { "Book: " + t } }
struct Film: Describable { let t: String; func describe() -> String { "Film: " + t } }

func show(_ d: Describable) { print(d.describe()) }
show(Book(t: "Swift"))
show(Film(t: "Inception"))

Exigences d'initialiseur

Les protocoles peuvent exiger des initialiseurs. Les classes doivent marquer l'implémentation avec required afin que les sous-classes la fournissent également.

protocol FromInt {
    init(value: Int)
}

struct Wrapper: FromInt {
    let value: Int
    init(value: Int) { self.value = value }
}

print(Wrapper(value: 42).value)

Héritage des protocoles

Un protocole peut hériter d'un ou de plusieurs autres protocoles et ajouter des exigences aux exigences héritées.

protocol Named { var name: String { get } }
protocol Aged: Named { var age: Int { get } }

struct Member: Aged {
    let name: String
    let age: Int
}

let m = Member(name: "Lin", age: 30)
print(m.name, m.age)

Protocoles réservés aux classes

Marquez un protocole avec AnyObject pour limiter la conformité aux classes, ce qui est utile pour les exigences reposant sur la sémantique de référence, comme la délégation.

protocol Counter: AnyObject {
    var count: Int { get set }
}

class Box: Counter {
    var count = 0
}

let b = Box()
b.count = 5
print(b.count)

Vérifier la conformité

Utilisez is et as? pour vérifier à l'exécution si une valeur est conforme à un protocole.

protocol Flyer { func fly() }
struct Bird: Flyer { func fly() { print("flap") } }
struct Rock {}

let things: [Any] = [Bird(), Rock()]
for t in things {
    if let f = t as? Flyer { f.fly() } else { print("grounded") }
}

Vérification rapide

Vérifiez votre compréhension des exigences des protocoles.

Récapitulatif

Vous avez appris qu'un protocole est un contrat : il déclare des exigences de propriétés, de méthodes, de mutating et d'initialiseurs sans fournir d'implémentations. Les types se conforment en satisfaisant chaque exigence ; les protocoles peuvent être utilisés comme types pour le polymorphisme, hériter d'autres protocoles et être limités aux classes avec AnyObject.

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 « Les protocoles comme contrats » est-elle gratuite ?

Oui — le texte complet de « Les protocoles comme contrats » 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 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Les protocoles comme contrats » ?

Définissez des contrats de comportement indépendants des types. 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 1 sur 4.

Combien de temps prend la leçon « Les protocoles comme contrats » ?

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. Les protocoles comme contrats
  2. Implémentations par défaut dans les extensions
  3. Composition de protocoles
  4. Conformité conditionnelle
← Retour à Swift Academy