Macros de miembros adjuntas para reducir código repetitivo
Genere automáticamente init, CodingKeys o conformidades con Equatable mediante macros de miembros.
Macros de miembros adjuntas para reducir código repetitivo es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.
Descripción general de las macros de miembros
Una macro de miembros adjunta genera nuevos miembros (propiedades, métodos e inits) directamente en el tipo decorado.
@AddID
struct User { var name: String }
// After expansion:
// struct User { var name: String; var id = UUID() }Conformidad con MemberMacro
Implemente MemberMacro y devuelva un conjunto de DeclSyntax que represente los nuevos miembros.
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()"]
}
}Generación de init
Las macros de miembros pueden generar un inicializador personalizado y sustituir el init miembro a miembro cuando sea necesario.
// Macro expansion returns:
[
"init(name: String) { self.name = name; self.id = UUID() }"
]Aspectos internos de la macro @Observable
La macro integrada @Observable de Swift usa macros de miembros para añadir infraestructura de observación a su clase.
@Observable
class Counter {
var count = 0
// macro adds: _$observationRegistrar, access(), withMutation()
}Lectura del tipo decorado
Acceda a las propiedades del tipo decorado mediante el parámetro decl para generar miembros sensibles al contexto.
if let structDecl = decl.as(StructDeclSyntax.self) {
let members = structDecl.memberBlock.members
// iterate to inspect stored properties
}Extracción de propiedades almacenadas
Filtre la lista de miembros en busca de declaraciones de variables con patrones de propiedades almacenadas para guiar la generación de código.
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
}Generación de Equatable a partir de los miembros
Una macro @AutoEquatable puede generar == comparando cada propiedad almacenada.
// Generated code:
static func == (lhs: User, rhs: User) -> Bool {
lhs.name == rhs.name && lhs.id == rhs.id
}Combinación de macros de miembros y de conformidad
A menudo se combina MemberMacro con ConformanceMacro para añadir miembros y declarar la conformidad con el protocolo.
struct AutoEquatableMacro: MemberMacro, ConformanceMacro { ... }Argumentos de atributos
Su macro puede aceptar argumentos que personalicen el código que genera.
@Clamped(range: 0...100)
var score: Int = 50
// macro reads range from attribute node and generates clamping accessorsInformes de errores de macros
Lance MacroExpansionError o emita diagnósticos cuando la macro se use incorrectamente.
guard decl.is(StructDeclSyntax.self) else {
throw MacroError.message("@AddID can only be applied to structs")
}Rendimiento de compilación
Como la expansión ocurre en tiempo de compilación, las macros de miembros no añaden ninguna sobrecarga en tiempo de ejecución y el código generado se puede almacenar en caché.
// All generated members are emitted as source code
// and compiled normally — no reflection at runtimeComprobación rápida
¿A qué protocolo debe conformar una macro de miembros adjunta?
Resumen de la lección
Las macros de miembros (MemberMacro) generan propiedades almacenadas, propiedades calculadas e inicializadores para el tipo que decoran. Lea los miembros existentes del tipo para producir código sensible al contexto. Combínelas con ConformanceMacro para añadir también conformidades con protocolos.
Aprende Swift con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 122
- Lecciones
- 409
Preguntas frecuentes
¿La lección «Macros de miembros adjuntas para reducir código repetitivo» es gratis?
Sí — el texto completo de «Macros de miembros adjuntas para reducir código repetitivo» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Macros de miembros adjuntas para reducir código repetitivo»?
Genere automáticamente init, CodingKeys o conformidades con Equatable mediante macros de miembros. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Swift Academy?
No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Macros de miembros adjuntas para reducir código repetitivo»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Swift Academy?
Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Roles de macros: independientes frente a adjuntas
- Escritura de una macro de expresión independiente
- Macros de miembros adjuntas para reducir código repetitivo
- Pruebas y depuración de macros