CustomDebugStringConvertible
Sediakan keluaran debug yang lebih lengkap.
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 descriptionTanda 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: Stringuntuk keluaran diagnostik - Digunakan oleh
debugPrint,String(reflecting:), dan pengawakutu printmenggunakandescription;debugPrintmenggunakandebugDescription- Tempatkan detail internal tambahan dalam keluaran diagnostik dan teks yang rapi dalam description
Berikutnya: refleksi dengan Mirror.
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
- CustomStringConvertible
- CustomDebugStringConvertible
- Refleksi dengan Mirror
- Membangun Tipe yang Ramah untuk Debug