CustomDebugStringConvertible
Sediakan output nyahpepijat yang lebih terperinci.
CustomDebugStringConvertible ialah pelajaran Swift Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Swift Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.
Paparan Nyahpepijat Berasingan
CustomDebugStringConvertible menyediakan debugDescription — perwakilan yang digunakan oleh debugPrint, perintah po LLDB dan penyahpepijat. Perwakilan ini boleh lebih terperinci daripada description.
Menambah debugDescription
Patuhi protokol dan sediakan sifat 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 berbanding 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)Bila Perlu Menyediakan Kedua-duanya
Gunakan description untuk output pengguna yang kemas dan debugDescription untuk perincian diagnostik (nilai mentah, keadaan dalaman). Menyediakan kedua-duanya memberikan hasil terbaik bagi setiap konteks.
Perincian Lebih Lanjut dalam Nyahpepijat
Paparkan maklumat dalaman yang tidak sepatutnya dilihat oleh 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)Output Nyahpepijat dalam Koleksi
debugPrint bagi koleksi menggunakan debugDescription setiap elemen:
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>Tingkah Laku Sandaran
Jika sesuatu jenis hanya menyediakan description, debugPrint akan menggunakannya sebagai sandaran. Jika jenis itu hanya menyediakan debugDescription, print biasa masih menggunakan bentuk cermin lalai:
struct Only: CustomStringConvertible {
let v: Int
var description: String { "Only(\(v))" }
}
debugPrint(Only(v: 3)) // Only(3) -- falls back to descriptionPetikan dalam Output Nyahpepijat
Perhatikan bahawa debugPrint bagi String menambah tanda petikan, selaras dengan sifat nyahpepijatnya:
print("hi") // hi
debugPrint("hi") // "hi"Diagnostik Tanpa Membocorkan Maklumat
Jauhkan rahsia daripada description, tetapi benarkan rahsia dalam debugDescription hanya jika log selamat. Pilih dengan sengaja perkara yang didedahkan oleh setiap satunya.
struct Key: CustomStringConvertible {
let secret: String
var description: String { "Key(***)" }
}
print(Key(secret: "abc")) // Key(***)Perincian Nyahpepijat untuk Enum
Enum mendapat manfaat daripada debugDescription yang mendedahkan kes mentah dan muatan:
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)Semakan Pantas
Fungsi manakah yang menggunakan debugDescription dan bukannya description?
Ringkasan
Anda telah mempelajari CustomDebugStringConvertible:
- Sediakan
var debugDescription: Stringuntuk output diagnostik - Digunakan oleh
debugPrint,String(reflecting:)dan penyahpepijat printmenggunakandescription;debugPrintmenggunakandebugDescription- Letakkan perincian dalaman tambahan dalam nyahpepijat dan teks yang kemas dalam description
Seterusnya: refleksi dengan Mirror.
Pelajari Swift dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 122
- Pelajaran
- 409
Soalan Lazim
Adakah pelajaran “CustomDebugStringConvertible” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Swift Academy, termasuk “CustomDebugStringConvertible”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “CustomDebugStringConvertible”?
Sediakan output nyahpepijat yang lebih terperinci. Anda berlatih Swift Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Swift Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Swift Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “CustomDebugStringConvertible” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- CustomStringConvertible
- CustomDebugStringConvertible
- Refleksi dengan Mirror
- Membina Jenis Mesra Nyahpepijat