0Pricing
Swift Academy · Leçon

Conformités conditionnelles

Rendez un type générique conforme à un protocole uniquement si son paramètre de type respecte les contraintes (par exemple, Box<T>: Equatable where T: Equatable ).

Conformités conditionnelles est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 1 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.

Pourquoi une conformité conditionnelle ?

La conformité conditionnelle ajoute une conformité à un protocole uniquement lorsque les paramètres de type respectent certaines contraintes. Cela rend les API plus précises, évite le code répétitif et se combine efficacement avec la bibliothèque standard.

Base d’un type générique

Commencez par un type générique. Sans travail supplémentaire, Box n’est pas conforme à l’égalité ou au hachage, même si T l’est.

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.

Conformité conditionnelle à l’égalité

Ajoutez l’égalité uniquement si T: Equatable. Le code qui compare des boîtes contenant des types ne prenant pas en charge l’égalité ne compilera pas, ce qui renforce la sécurité.

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 compile

Conformité conditionnelle au hachage

De même, adoptez le hachage uniquement lorsque l’élément prend en charge le hachage. Les types Set et Dictionary peuvent alors fonctionner avec 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: Hashable

Restreindre les fonctionnalités avec une clause conditionnelle

Utilisez une extension avec une clause conditionnelle pour exposer des méthodes uniquement lorsque certaines capacités sont disponibles, par exemple T: Numeric, tout en gardant l’API de base réduite.

// 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 Numeric

Présent dans la bibliothèque standard

Vous utilisez déjà ce mécanisme quotidiennement :

  • Tableau : égalité uniquement lorsque Element: Equatable.
  • Le hachage des dictionnaires et ensembles uniquement lorsque les clés ou les éléments sont Hashable.
  • L’égalité des optionnels uniquement lorsque Wrapped: Equatable.

Avantage : les API sont précises et sûres dès la compilation.

Vérification de la définition

Vérification rapide : que permet une conformité conditionnelle ?

Récapitulatif

Récapitulatif : utilisez une extension avec protocole et clause conditionnelle pour ajouter des conformités et des API uniquement lorsque les contraintes sont respectées. Votre code reste ainsi précis, sûr et facile à comprendre.

Questions Fréquemment Posées

La leçon « Conformités conditionnelles » est-elle gratuite ?

Oui — le texte complet de « Conformités conditionnelles » 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 « Conformités conditionnelles » ?

Rendez un type générique conforme à un protocole uniquement si son paramètre de type respecte les contraintes (par exemple, Box<T>: Equatable where T: Equatable ). 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 3.

Combien de temps prend la leçon « Conformités conditionnelles » ?

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. Conformités conditionnelles
  2. Contraintes récursives et génériques d’ordre supérieur
  3. Clauses where sur les extensions
← Retour à Swift Academy