0Pricing
Swift Academy · Leçon

CustomDebugStringConvertible

Fournissez une sortie de débogage plus riche.

CustomDebugStringConvertible est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 4 leçons au total.

Une vue de débogage distincte

CustomDebugStringConvertible fournit debugDescription — la représentation utilisée par debugPrint, la commande po de LLDB et le débogueur. Elle peut être plus détaillée que description.

Ajouter debugDescription

Adoptez le protocole et fournissez la propriété :

struct Point: CustomDebugStringConvertible {
    let x: Int
    let y: Int
    var debugDescription: String { "Point(x: \(x), y: \(y))" }
}
debugPrint(Point(x: 1, y: 2))  // Point(x: 1, y: 2)

debugPrint et print

print utilise description ; debugPrint utilise debugDescription :

struct Money: CustomStringConvertible, CustomDebugStringConvertible {
    let cents: Int
    var description: String { "$\(Double(cents)/100)" }
    var debugDescription: String { "Money(cents: \(cents))" }
}
let m = Money(cents: 250)
print(m)       // $2.5
debugPrint(m)  // Money(cents: 250)

Quand fournir les deux

Utilisez description pour une sortie claire destinée à l’utilisateur et debugDescription pour les détails de diagnostic (valeurs raw, état interne). Fournir les deux permet d’obtenir le meilleur résultat dans chaque contexte.

Davantage de détails dans le débogage

Rendez visibles les éléments internes que les utilisateurs ne devraient pas voir :

struct Session: CustomStringConvertible, CustomDebugStringConvertible {
    let user: String
    let token: String
    var description: String { "Session(\(user))" }
    var debugDescription: String { "Session(user: \(user), token: \(token))" }
}
let s = Session(user: "ann", token: "xyz")
print(s)       // Session(ann)
debugPrint(s)  // Session(user: ann, token: xyz)

Sortie de débogage dans les collections

debugPrint appliqué à une collection utilise le debugDescription de chaque élément :

struct Tag: CustomDebugStringConvertible {
    let name: String
    var debugDescription: String { "Tag(\(name))" }
}
debugPrint([Tag(name: "a"), Tag(name: "b")])  // [Tag(a), Tag(b)]

String(reflecting:)

Tout comme String(describing:) utilise description, String(reflecting:) utilise debugDescription :

struct Code: CustomDebugStringConvertible {
    let n: Int
    var debugDescription: String { "Code<\(n)>" }
}
print(String(reflecting: Code(n: 7)))  // Code<7>

Comportement de repli

Si un type fournit uniquement description, debugPrint utilise cette propriété en dernier recours. S’il fournit uniquement debugDescription, un print ordinaire utilise tout de même la forme miroir par défaut :

struct Only: CustomStringConvertible {
    let v: Int
    var description: String { "Only(\(v))" }
}
debugPrint(Only(v: 3))  // Only(3)  -- falls back to description

Guillemets dans la sortie de débogage

Notez que debugPrint appliqué à une valeur String ajoute des guillemets, ce qui reflète sa nature de débogage :

print("hi")        // hi
debugPrint("hi")   // "hi"

Diagnostics sans fuite d’informations

Ne mettez pas de secrets dans description, mais vous pouvez les autoriser dans debugDescription uniquement si les journaux sont sûrs. Choisissez délibérément ce que chacune de ces propriétés révèle.

struct Key: CustomStringConvertible {
    let secret: String
    var description: String { "Key(***)" }
}
print(Key(secret: "abc"))  // Key(***)

Détails de débogage pour une énumération

Les énumérations peuvent tirer parti d’un debugDescription qui révèle le cas raw et sa charge utile :

enum Load: CustomDebugStringConvertible {
    case idle
    case progress(Int)
    var debugDescription: String {
        switch self {
        case .idle: return "Load.idle"
        case .progress(let p): return "Load.progress(\(p))"
        }
    }
}
debugPrint(Load.progress(40))  // Load.progress(40)

Vérification rapide

Quelle fonction utilise debugDescription plutôt que description ?

Récapitulatif

Vous avez découvert CustomDebugStringConvertible :

  • Fournissez var debugDescription: String pour produire une sortie de diagnostic
  • Cette propriété est utilisée par debugPrint, String(reflecting:) et le débogueur
  • print utilise description ; debugPrint utilise debugDescription
  • Placez les détails internes supplémentaires dans le débogage et le texte clair dans description

Ensuite : la réflexion avec Mirror.

Questions Fréquemment Posées

La leçon « CustomDebugStringConvertible » est-elle gratuite ?

Oui — le texte complet de « CustomDebugStringConvertible » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « CustomDebugStringConvertible » ?

Fournissez une sortie de débogage plus riche. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Swift Academy ?

Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « CustomDebugStringConvertible » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?

Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. CustomStringConvertible
  2. CustomDebugStringConvertible
  3. Réflexion avec Mirror
  4. Créer des types adaptés au débogage
← Retour à Swift Academy