Swift Academy · Lección

Roles de macros: independientes frente a adjuntas

Comprenda las macros #expression y los roles de macros @attached peer/member/accessor.

Lección 1 de 413 pasos

Roles de macros: independientes frente a adjuntas es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 1 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.

¿Qué son las macros de Swift?

Las macros de Swift expanden el código fuente en tiempo de compilación y generan automáticamente código repetitivo sin sobrecarga en tiempo de ejecución.

// Macros are invoked with # (freestanding) or @ (attached)
#warning("Fix this later")
@Observable class Counter { var count = 0 }

Macros de expresión independientes

Las macros de expresión independientes comienzan con # y producen un valor o realizan un efecto secundario.

// #stringify expands to a tuple of the value and its source string
let (val, src) = #stringify(1 + 2)
print(val, src) // 3, "1 + 2"

Macros de declaración independientes

Las macros de declaración independientes emiten nuevas declaraciones (por ejemplo, funciones y variables) en el lugar donde se usan.

// #makePair emits two variables
#makePair("point", x: 1, y: 2)
// expands to: let pointX = 1; let pointY = 2

Macros de miembros adjuntas

Las macros @member adjuntas añaden nuevas propiedades almacenadas o calculadas, un init o métodos al tipo al que están adjuntas.

@AddID
struct User { var name: String }
// Expands to: var id = UUID()

Macros de accesores adjuntas

Las macros @accessor adjuntas generan implementaciones de getter y setter para propiedades almacenadas.

struct Point {
  @Clamped(0...100)
  var x: Int = 0
  // accessor macro generates get/set with clamping
}

Macros peer adjuntas

Las macros peer añaden declaraciones hermanas junto a la declaración a la que están adjuntas.

class Service {
  @AddAsync
  func fetchSync(completion: @escaping (Data)->Void) { ... }
  // peer macro adds: func fetch() async -> Data
}

Macros de conformidad adjuntas

Las macros de conformidad añaden conformidades con protocolos y las implementaciones necesarias a un tipo.

@EquatableByID
struct Product { var id: Int; var name: String }
// adds: extension Product: Equatable { ... }

Macros de extensión adjuntas

Las macros de extensión generan bloques de extensión completos para un tipo, lo que resulta útil para añadir implementaciones complejas de protocolos.

@CustomCodable
struct Config { var host: String; var port: Int }
// adds: extension Config: Codable { custom encode/decode }

La expansión de macros ocurre en tiempo de compilación

Todas las expansiones de macros tienen lugar durante la compilación: no hay ningún coste en tiempo de ejecución y el código expandido es visible en Xcode.

// Right-click macro usage in Xcode → "Expand Macro"
// to see the generated source code

Declaración de una macro

Las macros se declaran en un destino de macros independiente mediante el atributo @freestanding o @attached.

@freestanding(expression)
public macro stringify<T>(_ value: T) -> (T, String)
  = #externalMacro(module: "MyMacros", type: "StringifyMacro")

Resumen de los roles de las macros

Independientes: #expression, #declaration. Adjuntas: @member, @accessor, @peer, @conformance, @extension.

// Freestanding
let result = #stringify(40 + 2)
// Attached
@Observable class Model { var count = 0 }

Comprobación rápida

¿Qué rol de macro añade nuevos miembros (como propiedades o init) al tipo que decora?

Resumen de la lección

Las macros independientes (#name) producen valores o declaraciones. Las macros adjuntas (@name) amplían los tipos con miembros, accesores, elementos peer, conformidades o extensiones. Toda la expansión ocurre en tiempo de compilación.

Gratis para empezar

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 «Roles de macros: independientes frente a adjuntas» es gratis?

Sí — el texto completo de «Roles de macros: independientes frente a adjuntas» 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 «Roles de macros: independientes frente a adjuntas»?

Comprenda las macros #expression y los roles de macros @attached peer/member/accessor. 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 1 de 4.

¿Cuánto tiempo toma la lección «Roles de macros: independientes frente a adjuntas»?

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

  1. Roles de macros: independientes frente a adjuntas
  2. Escritura de una macro de expresión independiente
  3. Macros de miembros adjuntas para reducir código repetitivo
  4. Pruebas y depuración de macros
← Volver a Swift Academy