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) // 2Kinder 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 = 30Ein 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"]!) // 80displayStyle
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
// trueEnums 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") // 42Eine 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: 2020Kosten 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: hiKurze Überprüfung
Was erhalten Sie, wenn Sie über Mirror(reflecting: value).children iterieren?
Zusammenfassung
Sie haben Mirror kennengelernt:
Mirror(reflecting:)untersucht einen Wert zur Laufzeitchildrenliefert Paare aus Bezeichnung und WertdisplayStylegibt 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
- CustomStringConvertible
- CustomDebugStringConvertible
- Reflektion mit Mirror
- Debug-freundliche Typen erstellen