Bygga typer som är enkla att felsöka
Kombinera beskrivningar och reflection effektivt.
Bygga typer som är enkla att felsöka är en gratis lektion i Swift Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Swift Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Swift Academy innehåller totalt 4 lektioner.
Kombinera verktygen
De bästa typerna är enkla att inspektera. Kombinera CustomStringConvertible, CustomDebugStringConvertible och Mirror för att skapa värden som skrivs ut tydligt och vid behov avslöjar sina interna detaljer.
En ren description
Börja med utdata som är avsedd för användaren:
struct Vector: CustomStringConvertible {
let x: Double
let y: Double
var description: String { "(\(x), \(y))" }
}
print(Vector(x: 1, y: 2)) // (1.0, 2.0)Lägg till diagnostisk debugDescription
Lägg till mer information för felsökning:
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)Skapa description automatiskt med Mirror
Använd reflektion för att skapa en description utan att behöva lista varje fält manuellt:
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)En återanvändbar reflektionshjälpare
Flytta Mirror-logiken till en fristående funktion så att många typer kan dela samma felsökningsformaterare.
En gemensam describe-hjälpare
En hjälpare som återanvänds överallt:
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)Standardimplementation i protokoll
Ge en hel familj av typer reflektionsbaserad felsökning via en protokollutökning:
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]Snygg utskrift av kapslade värden
Reflektion anpassas naturligt när barnen själva kan skrivas ut:
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))Använda Swift dump
Den inbyggda dump använder Mirror för att skriva ut ett djupt, indraget träd — praktiskt för en snabb inspektion:
struct Node { let id = 1; let kids = [2, 3] }
dump(Node())
// - id: 1
// - kids: 2 elements ...Sätt ihop allt
En välutformad typ: ren description, utförlig felsökningsinformation och en reflektionsbaserad reservlösning — enkel att logga och felsöka.
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)Räkna fält med reflektion
Reflektion är också praktiskt för snabba strukturella kontroller, till exempel för att räkna egenskaper:
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 fieldsSnabb kontroll
Hur kan du skapa en description utan att manuellt lista alla egenskaper?
Sammanfattning
Du har lärt dig att skapa typer som är enkla att felsöka:
- Kombinera
description(ren) ochdebugDescription(detaljerad) - Använd
Mirrorför att automatiskt skapa descriptions från barnen - Flytta reflektionen till en hjälpare eller en standardimplementation i ett protokoll
dumpskriver ut ett djupt reflekterat träd för snabb inspektion
Kursen är klar!
Lär dig Swift med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 122
- Lektioner
- 409
Vanliga frågor
Är lektionen ”Bygga typer som är enkla att felsöka” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Swift Academy, inklusive ”Bygga typer som är enkla att felsöka”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Swift Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Bygga typer som är enkla att felsöka”?
Kombinera beskrivningar och reflection effektivt. Ni övar på Swift Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Swift Academy?
Du behöver inga förkunskaper. Utbildningen i Swift Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Bygga typer som är enkla att felsöka”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Swift Academy-lektionen?
Ja. Varje Swift Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- CustomStringConvertible
- CustomDebugStringConvertible
- Reflection med Mirror
- Bygga typer som är enkla att felsöka