0Pricing
Swift Academy · Pelajaran

Membangun Tipe yang Ramah untuk Debug

Gabungkan deskripsi dan refleksi secara efektif.

Membangun Tipe yang Ramah untuk Debug adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.

Menggabungkan Alat

Tipe terbaik mudah diperiksa. Gabungkan CustomStringConvertible, CustomDebugStringConvertible, dan Mirror untuk membuat nilai yang tercetak jelas dan dapat menampilkan bagian dalamnya saat diperlukan.

description yang Bersih

Mulailah dengan keluaran yang ditampilkan kepada pengguna:

struct Vector: CustomStringConvertible {
    let x: Double
    let y: Double
    var description: String { "(\(x), \(y))" }
}
print(Vector(x: 1, y: 2))  // (1.0, 2.0)

Menambahkan debugDescription Diagnostik

Tambahkan detail untuk penelusuran kesalahan:

struct Vector: CustomStringConvertible, CustomDebugStringConvertible {
    let x: Double
    let y: Double
    var description: String { "(\(x), \(y))" }
    var debugDescription: String { "Vector(x: \(x), y: \(y), len: \(length))" }
    var length: Double { (x * x + y * y).squareRoot() }
}
debugPrint(Vector(x: 3, y: 4))  // Vector(x: 3.0, y: 4.0, len: 5.0)

Membuat description Otomatis dengan Refleksi

Gunakan refleksi untuk membuat description tanpa mencantumkan setiap kolom secara manual:

struct Auto: CustomStringConvertible {
    let a = 1
    let b = "x"
    var description: String {
        let fields = Mirror(reflecting: self).children
            .map { "\($0.label ?? "_")=\($0.value)" }
            .joined(separator: ", ")
        return "Auto(\(fields))"
    }
}
print(Auto())  // Auto(a=1, b=x)

Pembantu Refleksi yang Dapat Digunakan Kembali

Pisahkan logika refleksi ke dalam fungsi bebas agar banyak tipe dapat menggunakan pemformat penelusuran kesalahan yang sama.

Pembantu Deskripsi Bersama

Satu pembantu yang digunakan kembali di mana-mana:

func reflectiveDescription(_ value: Any) -> String {
    let name = String(describing: type(of: value))
    let parts = Mirror(reflecting: value).children
        .map { "\($0.label ?? "_"): \($0.value)" }
        .joined(separator: ", ")
    return "\(name)(\(parts))"
}
struct P { let id = 7; let tag = "z" }
print(reflectiveDescription(P()))  // P(id: 7, tag: z)

Implementasi Bawaan Protokol

Berikan kemampuan penelusuran kesalahan reflektif kepada seluruh keluarga tipe melalui ekstensi protokol:

protocol Inspectable: CustomStringConvertible {}
extension Inspectable {
    var description: String {
        let parts = Mirror(reflecting: self).children
            .map { "\($0.label ?? "_")=\($0.value)" }
            .joined(separator: ", ")
        return "\(type(of: self))[\(parts)]"
    }
}
struct Widget: Inspectable { let w = 10; let h = 20 }
print(Widget())  // Widget[w=10, h=20]

Mencetak Nilai Bertingkat dengan Rapi

Refleksi melakukan rekursi secara alami ketika elemen anak juga dapat dicetak:

struct Inner: CustomStringConvertible { let v = 1; var description: String { "Inner(\(v))" } }
struct Outer: CustomStringConvertible {
    let inner = Inner()
    var description: String { "Outer(\(inner))" }
}
print(Outer())  // Outer(Inner(1))

Menggunakan Pencetakan Mendalam Swift

Fungsi bawaan dump menggunakan Mirror untuk mencetak pohon mendalam dengan indentasi — praktis untuk pemeriksaan cepat:

struct Node { let id = 1; let kids = [2, 3] }
dump(Node())
// - id: 1
// - kids: 2 elements ...

Menyatukan Semuanya

Tipe yang disempurnakan: description yang bersih, informasi penelusuran kesalahan yang kaya, dan cadangan reflektif — mudah dicatat dan mudah ditelusuri kesalahannya.

struct Order: CustomStringConvertible, CustomDebugStringConvertible {
    let id: Int
    let total: Double
    var description: String { "Order #\(id)" }
    var debugDescription: String { "Order(id: \(id), total: \(total))" }
}
let o = Order(id: 5, total: 9.99)
print(o)       // Order #5
debugPrint(o)  // Order(id: 5, total: 9.99)

Menghitung fields secara Reflektif

Refleksi juga berguna untuk pernyataan struktural cepat, seperti menghitung properti:

struct Profile { let name = "A"; let age = 1; let city = "X" }
let fieldCount = Mirror(reflecting: Profile()).children.count
print("Profile has \(fieldCount) fields")  // Profile has 3 fields

Pemeriksaan Cepat

Bagaimana Anda dapat membuat description tanpa mencantumkan setiap properti secara manual?

Ringkasan

Anda telah mempelajari cara membangun tipe yang mudah ditelusuri kesalahannya:

  • Gabungkan description (bersih) dan debugDescription (terperinci)
  • Gunakan Mirror untuk membuat description secara otomatis dari elemen anak
  • Pisahkan refleksi ke dalam pembantu atau implementasi bawaan protokol
  • dump mencetak pohon reflektif yang mendalam untuk pemeriksaan cepat

Kursus selesai!

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Membangun Tipe yang Ramah untuk Debug” gratis?

Ya — teks lengkap “Membangun Tipe yang Ramah untuk Debug” 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 “Membangun Tipe yang Ramah untuk Debug”?

Gabungkan deskripsi dan refleksi secara efektif. 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 4 dari 4.

Berapa lama pelajaran “Membangun Tipe yang Ramah untuk Debug” 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