0Pricing
Swift Academy · Lektion

Reflektion mit Mirror

Untersuchen Sie die Eigenschaften beliebiger Werte zur Laufzeit.

Reflektion mit Mirror ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 3 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 ist Mirror?

Mirror ist die Laufzeitreflexion von Swift: Sie können damit die Struktur eines Werts — seine Eigenschaften und deren Werte — untersuchen, ohne den konkreten Typ zur Compilezeit zu kennen.

Einen Mirror erstellen

Übergeben Sie einen beliebigen Wert an Mirror(reflecting:):

struct Point { let x: Int; let y: Int }
let m = Mirror(reflecting: Point(x: 1, y: 2))
print(m.children.count)  // 2

Kinder durchlaufen

Jedes Kind ist ein Paar aus Bezeichnung und Wert:

struct User { let name: String; let age: Int }
let m = Mirror(reflecting: User(name: "Ann", age: 30))
for child in m.children {
    print("\(child.label ?? "?") = \(child.value)")
}
// name = Ann
// age = 30

Ein Dictionary aus Feldern erstellen

Mit Reflexion können Sie eine Struktur in ein Dictionary umwandeln:

struct Config { let host: String; let port: Int }
let m = Mirror(reflecting: Config(host: "x", port: 80))
var dict: [String: Any] = [:]
for c in m.children { if let l = c.label { dict[l] = c.value } }
print(dict["port"]!)  // 80

displayStyle

Mirror stellt ein displayStyle bereit — .struct, .class, .enum, .tuple, .collection usw. — sodass Sie abhängig von der Art des Werts unterschiedliche Verarbeitungen ausführen können.

Anzeigestil untersuchen

Ermitteln Sie, um welche Art von Wert es sich handelt:

struct S { let a = 1 }
let m = Mirror(reflecting: S())
if m.displayStyle == .struct {
    print("it is a struct with \(m.children.count) field(s)")
}
// it is a struct with 1 field(s)

Ein Tupel reflektieren

Tupel stellen untergeordnete Elemente nach ihrer Position bereit:

let m = Mirror(reflecting: (10, "hi", true))
for c in m.children { print(c.value) }
// 10
// hi
// true

Enums reflektieren

Bei Enum-Fällen mit zugehörigen Werten enthält das untergeordnete Element die Nutzdaten:

enum Result2 { case ok(Int); case fail(String) }
let m = Mirror(reflecting: Result2.ok(42))
print(m.children.first?.value ?? "none")  // 42

Eine generische Feldausgabe

Reflexion ermöglicht ty nunabhängige Hilfsfunktionen:

func dump2(_ value: Any) {
    for c in Mirror(reflecting: value).children {
        print("\(c.label ?? "_"): \(c.value)")
    }
}
struct Car { let make: String; let year: Int }
dump2(Car(make: "Mini", year: 2020))
// make: Mini
// year: 2020

Kosten und Grenzen der Reflexion

Mirror ist langsamer als der direkte Zugriff und schreibgeschützt — Sie können darüber keine Eigenschaften setzen. Verwenden Sie es zum Debuggen, Protokollieren und für Serialisierungshilfen, nicht in zeitkritischen Codepfaden.

struct P { let v: Int }
let m = Mirror(reflecting: P(v: 5))
print(m.children.first!.value)  // 5  (read only)

Reflektierte Werte umwandeln

Die Werte der untergeordneten Elemente sind als Any typisiert. Wandeln Sie sie zurück in den konkreten Typ um, wenn Sie ihn benötigen:

struct Box { let count: Int; let label: String }
let m = Mirror(reflecting: Box(count: 3, label: "hi"))
for c in m.children {
    if let n = c.value as? Int { print("int: \(n)") }
    if let s = c.value as? String { print("str: \(s)") }
}
// int: 3
// str: hi

Kurze Überprüfung

Was erhalten Sie, wenn Sie über Mirror(reflecting: value).children iterieren?

Zusammenfassung

Sie haben Mirror kennengelernt:

  • Mirror(reflecting:) untersucht einen Wert zur Laufzeit
  • children liefert Paare aus Bezeichnung und Wert
  • displayStyle gibt an, ob es sich um eine Struktur, Klasse, Enum, ein Tupel oder eine Collection handelt
  • Schreibgeschützt und langsamer — hervorragend zum Debuggen und für Serialisierung, aber nicht für zeitkritische Codepfade

Als Nächstes erstellen Sie debug-freundliche Typen.

Häufig gestellte Fragen

Ist die Lektion „Reflektion mit Mirror“ kostenlos?

Ja — der vollständige Text von „Reflektion mit Mirror“ 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 „Reflektion mit Mirror“?

Untersuchen Sie die Eigenschaften beliebiger Werte zur Laufzeit. 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 3 von 4.

Wie lange dauert die Lektion „Reflektion mit Mirror“?

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. CustomStringConvertible
  2. CustomDebugStringConvertible
  3. Reflektion mit Mirror
  4. Debug-freundliche Typen erstellen
← Zurück zu Swift Academy