0Pricing
Swift Academy · Lektion

Debug-freundliche Typen erstellen

Kombinieren Sie Beschreibungen und Reflektion wirkungsvoll.

Debug-freundliche Typen erstellen ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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.

Werkzeuge kombinieren

Die besten Typen lassen sich einfach untersuchen. Kombinieren Sie CustomStringConvertible, CustomDebugStringConvertible und Mirror, damit Werte übersichtlich ausgegeben werden und bei Bedarf ihre internen Details offenlegen.

Eine klare description

Beginnen Sie mit der Ausgabe für Benutzer:

struct Vector: CustomStringConvertible {
    let x: Double
    let y: Double
    var description: String { "(\(x), \(y))" }
}
print(Vector(x: 1, y: 2))  // (1.0, 2.0)

Diagnostische debugDescription hinzufügen

Ergänzen Sie Details für das Debuggen:

struct Vector: CustomStringConvertible, CustomDebugStringConvertible {
    let x: Double
    let y: Double
    var description: String { "(\(x), \(y))" }
    var debugDescription: String { "Vector(x: \(x), y: \(y), len: \(length))" }
    var length: Double { (x * x + y * y).squareRoot() }
}
debugPrint(Vector(x: 3, y: 4))  // Vector(x: 3.0, y: 4.0, len: 5.0)

description mit Mirror automatisch erzeugen

Verwenden Sie Reflexion, um eine description zu erstellen, ohne jedes Feld von Hand aufzulisten:

struct Auto: CustomStringConvertible {
    let a = 1
    let b = "x"
    var description: String {
        let fields = Mirror(reflecting: self).children
            .map { "\($0.label ?? "_")=\($0.value)" }
            .joined(separator: ", ")
        return "Auto(\(fields))"
    }
}
print(Auto())  // Auto(a=1, b=x)

Eine wiederverwendbare Reflexionshilfe

Kapseln Sie die Mirror-Logik in einer freien Funktion, damit viele Typen denselben Debug-Formatter verwenden können.

Gemeinsame describe-Hilfsfunktion

Eine Hilfsfunktion, die überall wiederverwendet wird:

func reflectiveDescription(_ value: Any) -> String {
    let name = String(describing: type(of: value))
    let parts = Mirror(reflecting: value).children
        .map { "\($0.label ?? "_"): \($0.value)" }
        .joined(separator: ", ")
    return "\(name)(\(parts))"
}
struct P { let id = 7; let tag = "z" }
print(reflectiveDescription(P()))  // P(id: 7, tag: z)

Standardimplementierung per Protocol

Ermöglichen Sie einer ganzen Gruppe von Typen reflektierbares Debugging durch eine Protocol-Erweiterung:

protocol Inspectable: CustomStringConvertible {}
extension Inspectable {
    var description: String {
        let parts = Mirror(reflecting: self).children
            .map { "\($0.label ?? "_")=\($0.value)" }
            .joined(separator: ", ")
        return "\(type(of: self))[\(parts)]"
    }
}
struct Widget: Inspectable { let w = 10; let h = 20 }
print(Widget())  // Widget[w=10, h=20]

Verschachtelte Werte formatiert ausgeben

Die Reflexion wird auf natürliche Weise rekursiv fortgesetzt, wenn die untergeordneten Elemente selbst ausgabefähig sind:

struct Inner: CustomStringConvertible { let v = 1; var description: String { "Inner(\(v))" } }
struct Outer: CustomStringConvertible {
    let inner = Inner()
    var description: String { "Outer(\(inner))" }
}
print(Outer())  // Outer(Inner(1))

Swift dump verwenden

Das integrierte dump verwendet Mirror, um einen tief verschachtelten, eingerückten Baum auszugeben — praktisch für eine schnelle Untersuchung:

struct Node { let id = 1; let kids = [2, 3] }
dump(Node())
// - id: 1
// - kids: 2 elements ...

Alles zusammenführen

Ein ausgereifter Typ: eine klare description, ausführliche Debug-Informationen und ein reflektierender Fallback — einfach zu protokollieren und einfach zu debuggen.

struct Order: CustomStringConvertible, CustomDebugStringConvertible {
    let id: Int
    let total: Double
    var description: String { "Order #\(id)" }
    var debugDescription: String { "Order(id: \(id), total: \(total))" }
}
let o = Order(id: 5, total: 9.99)
print(o)       // Order #5
debugPrint(o)  // Order(id: 5, total: 9.99)

Felder reflektierend zählen

Reflexion ist auch für schnelle strukturelle Zusicherungen nützlich, etwa zum Zählen von Eigenschaften:

struct Profile { let name = "A"; let age = 1; let city = "X" }
let fieldCount = Mirror(reflecting: Profile()).children.count
print("Profile has \(fieldCount) fields")  // Profile has 3 fields

Kurze Überprüfung

Wie können Sie eine description erstellen, ohne jede Eigenschaft manuell aufzulisten?

Zusammenfassung

Sie haben gelernt, debug-freundliche Typen zu erstellen:

  • description (übersichtlich) und debugDescription (detailliert) kombinieren
  • Mirror verwenden, um descriptions automatisch aus untergeordneten Elementen zu erzeugen
  • Die Reflexion in eine Hilfsfunktion oder eine Protocol-Standardimplementierung auslagern
  • dump gibt für eine schnelle Untersuchung einen tief reflektierten Baum aus

Kurs abgeschlossen!

Häufig gestellte Fragen

Ist die Lektion „Debug-freundliche Typen erstellen“ kostenlos?

Ja — der vollständige Text von „Debug-freundliche Typen erstellen“ 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 „Debug-freundliche Typen erstellen“?

Kombinieren Sie Beschreibungen und Reflektion wirkungsvoll. 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 4 von 4.

Wie lange dauert die Lektion „Debug-freundliche Typen erstellen“?

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