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 fieldsKurze Ü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) unddebugDescription(detailliert) kombinierenMirrorverwenden, um descriptions automatisch aus untergeordneten Elementen zu erzeugen- Die Reflexion in eine Hilfsfunktion oder eine Protocol-Standardimplementierung auslagern
dumpgibt 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
- CustomStringConvertible
- CustomDebugStringConvertible
- Reflektion mit Mirror
- Debug-freundliche Typen erstellen