Ein freistehendes Expression-Makro schreiben
Implementieren Sie ein einfaches #stringify-Makro mit SwiftSyntax und MacroExpansion.
Ein freistehendes Expression-Makro schreiben ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.
Projekteinrichtung
Makros befinden sich in einem separaten Swift-Package-Target vom Typ .macro und verwenden SwiftSyntax.
// Package.swift (excerpt)
.macro(
name: "MyMacros",
dependencies: [
.product(name: "SwiftSyntaxMacros", package: "swift-syntax"),
.product(name: "SwiftCompilerPlugin", package: "swift-syntax")
]
)Makrodeklaration
Deklarieren Sie die Makrosignatur in einem Library-Target, damit Clients das Makro aufrufen können.
@freestanding(expression)
public macro stringify<T>(_ value: T) -> (T, String)
= #externalMacro(module: "MyMacros", type: "StringifyMacro")Den Makrotyp implementieren
Implementieren Sie das Makro, indem Sie ExpressionMacro konform machen und ein ExprSyntax zurückgeben.
import SwiftSyntaxMacros
import SwiftSyntax
struct StringifyMacro: ExpressionMacro {
static func expansion(
of node: some FreestandingMacroExpansionSyntax,
in context: some MacroExpansionContext
) throws -> ExprSyntax {
guard let arg = node.arguments.first?.expression else {
throw MacroError.message("Need an argument")
}
return "(\(arg), \(literal: arg.description))"
}
}Das Plugin registrieren
Erstellen Sie ein CompilerPlugin, das alle Makros im Package auflistet.
import SwiftCompilerPlugin
@main
struct MyPlugin: CompilerPlugin {
let providingMacros: [Macro.Type] = [
StringifyMacro.self
]
}Das Makro verwenden
Importieren Sie die Makrobibliothek und rufen Sie das Makro mit #stringify auf.
import MyMacros
let (value, source) = #stringify(2 + 3)
print(value) // 5
print(source) // "2 + 3"ExprSyntax erstellen
Rückgabewerte werden mithilfe von String-Interpolation auf ExprSyntax erstellt, wobei die Typsicherheit von SwiftSyntax genutzt wird.
// The expansion returns a tuple literal
return "((\(arg)), \(literal: arg.description))"Auf Makroargumente zugreifen
Auf Argumente greifen Sie über node.arguments zu, einer Liste von Ausdrücken mit Labels.
let args = node.arguments
for arg in args {
print(arg.label?.text ?? "_", arg.expression)
}Diagnosen erzeugen
Geben Sie aus Makros heraus Compilerwarnungen oder -fehler über den Expansion Context aus.
context.diagnose(Diagnostic(
node: node,
message: MyDiagnostic.missingArgument
))SwiftSyntax-Syntaxknoten
SwiftSyntax stellt jedes Sprachelement als typisierten Syntaxknoten dar, den Sie untersuchen und erstellen können.
import SwiftSyntax
let expr: ExprSyntax = "1 + 2"
print(type(of: expr)) // BinaryOperatorExprSyntaxMakro-Hygiene
Swift-Makros sind standardmäßig hygienisch: Erzeugte Namen kollidieren nicht mit Namen im aufrufenden Gültigkeitsbereich.
// Macro-generated variables get unique names internally
// preventing accidental shadowing in user codeMakros in Xcode erweitern
Klicken Sie in Xcode mit der rechten Maustaste auf einen beliebigen Makroaufruf und wählen Sie Makro erweitern, um den erzeugten Quelltext zu untersuchen.
#stringify(40 + 2)
// Xcode expands to: (40 + 2, "40 + 2")Schnelltest
Welchem Protokoll muss die Implementierung eines Ausdrucksmakros entsprechen?
Zusammenfassung der Lektion
Schreiben Sie ein freistehendes Ausdrucksmakro, indem Sie es mit @freestanding(expression) deklarieren, ExpressionMacro in einem .macro-Target implementieren, es über CompilerPlugin registrieren und mit #macroName() aufrufen.
Lerne Swift mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 122
- Lektionen
- 409
Häufig gestellte Fragen
Ist die Lektion „Ein freistehendes Expression-Makro schreiben“ kostenlos?
Ja — der vollständige Text von „Ein freistehendes Expression-Makro schreiben“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Ein freistehendes Expression-Makro schreiben“?
Implementieren Sie ein einfaches #stringify-Makro mit SwiftSyntax und MacroExpansion. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Swift Academy zu starten?
Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Ein freistehendes Expression-Makro schreiben“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?
Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Makrorollen: Freestanding vs. Attached
- Ein freistehendes Expression-Makro schreiben
- Attached-Member-Makros zur Reduzierung von Boilerplate
- Makros testen und debuggen