Macros en Swift 5.9: @Observable, #stringify y cómo definir las propias

@Observable (Swift 5.9 / iOS 17) sustituye a ObservableObject + @Published. La macro genera el código de observación automáticamente:

import Observation

@Observable
class Contador {
    var valor = 0           // observado automáticamente
    var nombre = "default"  // observado automáticamente

    func incrementar() { valor += 1 }
}

// En SwiftUI: la vista se redibuja cuando valor o nombre cambian
struct ContadorView: View {
    let contador: Contador
    var body: some View {
        Text("(contador.valor)")
        Button("Más") { contador.incrementar() }
    }
}

Cómo ver lo que genera una macro

En Xcode, haz clic derecho sobre una macro y elige «Expand Macro». Verás el código Swift generado inline. Esto facilita depurar y entender exactamente qué hace cada macro.

Implementar tu propia macro

// Package.swift: el target de la macro debe ser un plugin
// .macro(name: "MiMacro", targets: ["MiMacroMacros"])

import SwiftSyntaxMacros

public struct MiMacro: ExpressionMacro {
    public static func expansion(
        of node: some FreestandingMacroExpansionSyntax,
        in context: some MacroExpansionContext
    ) throws -> ExprSyntax {
        // Generar código Swift como árbol sintáctico
        return "42"
    }
}

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP