Swift Academy · Pelajaran

CustomDebugStringConvertible

Sediakan keluaran debug yang lebih lengkap.

Pelajaran 2 dari 413 langkah

CustomDebugStringConvertible adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.

Tampilan Diagnostik Terpisah

CustomDebugStringConvertible menyediakan debugDescription — representasi yang digunakan oleh debugPrint, perintah po LLDB, dan pengawakutu. Representasi ini dapat lebih terperinci daripada description.

Menambahkan debugDescription

Terapkan protokolnya dan sediakan properti tersebut:

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 versus print

print menggunakan description; debugPrint menggunakan 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)

Kapan Menyediakan Keduanya

Gunakan description untuk keluaran pengguna yang rapi dan debugDescription untuk detail diagnostik (nilai mentah dan status internal). Menyediakan keduanya memberi hasil terbaik untuk setiap konteks.

Detail Lebih Banyak dalam Diagnostik

Tampilkan detail internal yang seharusnya tidak dilihat pengguna:

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)

Keluaran Diagnostik dalam Koleksi

debugPrint pada koleksi menggunakan debugDescription setiap elemennya:

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

String(reflecting:)

Sama seperti String(describing:) menggunakan description, String(reflecting:) menggunakan debugDescription:

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

Perilaku Cadangan

Jika suatu tipe hanya menyediakan description, debugPrint menggunakan properti itu sebagai cadangan. Jika hanya menyediakan debugDescription, print biasa tetap menggunakan bentuk mirror bawaan:

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

Tanda Kutip dalam Keluaran Diagnostik

Perhatikan bahwa debugPrint untuk String menambahkan tanda kutip karena sifatnya yang ditujukan untuk diagnostik:

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

Diagnostik Tanpa Membocorkan Informasi

Jauhkan rahasia dari description, tetapi Anda boleh menyertakannya dalam debugDescription hanya jika log aman. Tentukan dengan sengaja informasi yang boleh diungkapkan oleh masing-masing properti.

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

Detail Diagnostik untuk Enumerasi

Enumerasi dapat memanfaatkan debugDescription yang menampilkan kasus mentah dan muatannya:

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)

Pemeriksaan Singkat

Fungsi mana yang menggunakan debugDescription, bukan description?

Ringkasan

Anda telah mempelajari protokol string kustom untuk diagnostik:

  • Sediakan var debugDescription: String untuk keluaran diagnostik
  • Digunakan oleh debugPrint, String(reflecting:), dan pengawakutu
  • print menggunakan description; debugPrint menggunakan debugDescription
  • Tempatkan detail internal tambahan dalam keluaran diagnostik dan teks yang rapi dalam description

Berikutnya: refleksi dengan Mirror.

Gratis untuk memulai

Belajar Swift dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
122
Pelajaran
409

Pertanyaan yang Sering Diajukan

Apakah pelajaran “CustomDebugStringConvertible” gratis?

Ya — teks lengkap “CustomDebugStringConvertible” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “CustomDebugStringConvertible”?

Sediakan keluaran debug yang lebih lengkap. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Swift Academy?

Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “CustomDebugStringConvertible” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. CustomStringConvertible
  2. CustomDebugStringConvertible
  3. Refleksi dengan Mirror
  4. Membangun Tipe yang Ramah untuk Debug
← Kembali ke Swift Academy