Swift Academy · Lektion

Makrorollen: Freestanding vs. Attached

Verstehen Sie #expression-Makros sowie die Makrorollen @attached peer/member/accessor.

Lektion 1 von 413 Schritte

Makrorollen: Freestanding vs. Attached ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 1 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.

Was sind Swift-Makros?

Swift-Makros erweitern Quellcode zur Compile-Zeit und erzeugen automatisch Boilerplate-Code, ohne Laufzeitaufwand zu verursachen.

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

Freistehende Ausdrucksmakros

Freistehende Ausdrucksmakros beginnen mit # und erzeugen einen Wert oder führen einen Seiteneffekt aus.

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

Freistehende Deklarationsmakros

Freistehende Deklarationsmakros erzeugen neue Deklarationen (z. B. Funktionen oder Variablen) an der Verwendungsstelle.

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

Angehängte Member-Makros

Angehängte @member-Makros fügen dem Typ, an den sie angehängt sind, neue gespeicherte oder berechnete Eigenschaften, einen Init oder Methoden hinzu.

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

Angehängte Accessor-Makros

Angehängte @accessor-Makros erzeugen Getter- und Setter-Implementierungen für gespeicherte Eigenschaften.

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

Angehängte Peer-Makros

Peer-Makros fügen neben der Deklaration, an die sie angehängt sind, gleichrangige Deklarationen hinzu.

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

Angehängte Conformance-Makros

Conformance-Makros fügen einem Typ Protokollkonformitäten und die erforderlichen Implementierungen hinzu.

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

Angehängte Extension-Makros

Extension-Makros erzeugen vollständige Extension-Blöcke für einen Typ und eignen sich besonders zum Hinzufügen komplexer Protokollimplementierungen.

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

Makro-Erweiterung erfolgt zur Compile-Zeit

Alle Makro-Erweiterungen erfolgen während der Kompilierung – es entstehen keine Laufzeitkosten, und der erweiterte Code ist in Xcode sichtbar.

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

Ein Makro deklarieren

Makros werden in einem separaten Makro-Target mit dem Attribut @freestanding oder @attached deklariert.

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

Zusammenfassung der Makro-Rollen

Freistehend: #expression, #declaration. Ange hängt: @member, @accessor, @peer, @conformance, @extension.

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

Schnelltest

Welche Makro-Rolle fügt dem dekorierten Typ neue Member wie Eigenschaften oder einen Init hinzu?

Zusammenfassung der Lektion

Freistehende Makros (#name) erzeugen Werte oder Deklarationen. Angehängte Makros (@name) erweitern Typen um Member, Accessors, Peer-Deklarationen, Konformitäten oder Extensions. Alle Erweiterungen erfolgen zur Compile-Zeit.

Kostenlos starten

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 „Makrorollen: Freestanding vs. Attached“ kostenlos?

Ja — der vollständige Text von „Makrorollen: Freestanding vs. Attached“ 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 „Makrorollen: Freestanding vs. Attached“?

Verstehen Sie #expression-Makros sowie die Makrorollen @attached peer/member/accessor. 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 1 von 4.

Wie lange dauert die Lektion „Makrorollen: Freestanding vs. Attached“?

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

  1. Makrorollen: Freestanding vs. Attached
  2. Ein freistehendes Expression-Makro schreiben
  3. Attached-Member-Makros zur Reduzierung von Boilerplate
  4. Makros testen und debuggen
← Zurück zu Swift Academy