Swift Academy · Pelajaran

CustomDebugStringConvertible

Sediakan output nyahpepijat yang lebih terperinci.

Pelajaran 2 daripada 413 langkah

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 description

Petikan 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: String untuk output diagnostik
  • Digunakan oleh debugPrint, String(reflecting:) dan penyahpepijat
  • print menggunakan description; debugPrint menggunakan debugDescription
  • Letakkan perincian dalaman tambahan dalam nyahpepijat dan teks yang kemas dalam description

Seterusnya: refleksi dengan Mirror.

Percuma untuk bermula

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

  1. CustomStringConvertible
  2. CustomDebugStringConvertible
  3. Refleksi dengan Mirror
  4. Membina Jenis Mesra Nyahpepijat
← Kembali ke Swift Academy