Swift Academy · Lektion

Bygga typer som är enkla att felsöka

Kombinera beskrivningar och reflection effektivt.

Lektion 4 av 413 steg

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 fields

Snabb 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) och debugDescription (detaljerad)
  • Använd Mirror för att automatiskt skapa descriptions från barnen
  • Flytta reflektionen till en hjälpare eller en standardimplementation i ett protokoll
  • dump skriver ut ett djupt reflekterat träd för snabb inspektion

Kursen är klar!

Gratis att börja

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

  1. CustomStringConvertible
  2. CustomDebugStringConvertible
  3. Reflection med Mirror
  4. Bygga typer som är enkla att felsöka
← Tillbaka till Swift Academy