Swift Academy · Leçon

Macros attachées aux membres pour réduire le code répétitif

Générer automatiquement des initialiseurs, des CodingKeys ou des conformités Equatable avec des macros de membres.

Leçon 3 sur 413 étapes

Macros attachées aux membres pour réduire le code répétitif est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 3 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.

Présentation des macros de membres

Une macro de membre attachée génère directement de nouveaux membres (propriétés, méthodes et initialiseurs) sur le type décoré.

@AddID
struct User { var name: String }
// After expansion:
// struct User { var name: String; var id = UUID() }

Se conformer à MemberMacro

Implémentez MemberMacro et renvoyez un tableau de DeclSyntax représentant les nouveaux membres.

import SwiftSyntaxMacros

struct AddIDMacro: MemberMacro {
  static func expansion(
    of node: AttributeSyntax,
    providingMembersOf decl: some DeclGroupSyntax,
    in context: some MacroExpansionContext
  ) throws -> [DeclSyntax] {
    return ["var id = UUID()"]
  }
}

Générer un initialiseur

Les macros de membres peuvent générer un initialiseur personnalisé, qui remplace si nécessaire l’initialiseur membre à membre.

// Macro expansion returns:
[
  "init(name: String) { self.name = name; self.id = UUID() }"
]

Fonctionnement interne de la macro @Observable

La macro @Observable intégrée à Swift utilise des macros de membres pour ajouter une infrastructure d’observation à votre classe.

@Observable
class Counter {
  var count = 0
  // macro adds: _$observationRegistrar, access(), withMutation()
}

Lire le type décoré

Accédez aux propriétés du type décoré via le paramètre decl afin de générer des membres adaptés au contexte.

if let structDecl = decl.as(StructDeclSyntax.self) {
  let members = structDecl.memberBlock.members
  // iterate to inspect stored properties
}

Extraire les propriétés stockées

Filtrez la liste des membres pour trouver les déclarations de variables correspondant aux modèles de propriétés stockées, afin de piloter la génération de code.

let storedProps = members.compactMap { member -> VariableDeclSyntax? in
  guard let varDecl = member.decl.as(VariableDeclSyntax.self),
        varDecl.bindingSpecifier.tokenKind == .keyword(.var)
  else { return nil }
  return varDecl
}

Générer Equatable à partir des membres

Une macro @AutoEquatable peut générer == en comparant chaque propriété stockée.

// Generated code:
static func == (lhs: User, rhs: User) -> Bool {
  lhs.name == rhs.name && lhs.id == rhs.id
}

Combiner les macros de membres et de conformité

Vous associez souvent MemberMacro à ConformanceMacro pour ajouter des membres et déclarer la conformité au protocole.

struct AutoEquatableMacro: MemberMacro, ConformanceMacro { ... }

Arguments d’attribut

Votre macro peut accepter des arguments qui personnalisent le code qu’elle génère.

@Clamped(range: 0...100)
var score: Int = 50
// macro reads range from attribute node and generates clamping accessors

Signalement des erreurs de macro

Levez MacroExpansionError ou émettez des diagnostics lorsque la macro est utilisée incorrectement.

guard decl.is(StructDeclSyntax.self) else {
  throw MacroError.message("@AddID can only be applied to structs")
}

Performances de compilation

Comme l’expansion a lieu à la compilation, les macros de membres n’ajoutent aucune surcharge à l’exécution et le code généré peut être mis en cache.

// All generated members are emitted as source code
// and compiled normally — no reflection at runtime

Vérification rapide

À quel protocole une macro de membre attachée doit-elle se conformer ?

Récapitulatif de la leçon

Les macros de membres (MemberMacro) génèrent des propriétés stockées, des propriétés calculées et des initialiseurs pour le type qu’elles décorent. Lisez les membres existants du type pour produire un code adapté au contexte. Combinez-les avec ConformanceMacro pour ajouter également des conformités à des protocoles.

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 « Macros attachées aux membres pour réduire le code répétitif » est-elle gratuite ?

Oui — le texte complet de « Macros attachées aux membres pour réduire le code répétitif » 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 « Macros attachées aux membres pour réduire le code répétitif » ?

Générer automatiquement des initialiseurs, des CodingKeys ou des conformités Equatable avec des macros de membres. 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 3 sur 4.

Combien de temps prend la leçon « Macros attachées aux membres pour réduire le code répétitif » ?

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. Rôles des macros : autonomes ou attachées
  2. Écrire une macro d’expression autonome
  3. Macros attachées aux membres pour réduire le code répétitif
  4. Tester et déboguer des macros
← Retour à Swift Academy