@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"
}
}
