CustomDebugStringConvertible
จัดเตรียมผลลัพธ์การแก้ไขข้อบกพร่องที่ละเอียดขึ้น
CustomDebugStringConvertible เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
มุมมองการแก้จุดบกพร่องแยกต่างหาก
CustomDebugStringConvertible มี debugDescription ซึ่งเป็นรูปแบบที่ debugPrint, คำสั่ง po ของ LLDB และเครื่องมือแก้จุดบกพร่องใช้ รูปแบบนี้อาจมีรายละเอียดมากกว่า description
การเพิ่ม debugDescription
ทำให้สอดคล้องกับโปรโตคอลและกำหนดคุณสมบัตินี้:
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 กับ print
print ใช้ description ส่วน debugPrint ใช้ 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)เมื่อใดควรกำหนดทั้งสองอย่าง
ใช้ description สำหรับผลลัพธ์ที่สะอาดและแสดงต่อผู้ใช้ และใช้ debugDescription สำหรับรายละเอียดเพื่อการวินิจฉัย (ค่าดิบและสถานะภายใน) การกำหนดทั้งสองอย่างช่วยให้เหมาะสมกับแต่ละบริบทที่สุด
รายละเอียดเพิ่มเติมในการแก้จุดบกพร่อง
แสดงข้อมูลภายในที่ผู้ใช้ไม่ควรเห็น:
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)ผลลัพธ์การแก้จุดบกพร่องในคอลเลกชัน
debugPrint ของคอลเลกชันจะใช้ debugDescription ของสมาชิกแต่ละรายการ:
struct Tag: CustomDebugStringConvertible {
let name: String
var debugDescription: String { "Tag(\(name))" }
}
debugPrint([Tag(name: "a"), Tag(name: "b")]) // [Tag(a), Tag(b)]String(reflecting:)
เช่นเดียวกับที่ String(describing:) ใช้ description, String(reflecting:) ก็ใช้ debugDescription:
struct Code: CustomDebugStringConvertible {
let n: Int
var debugDescription: String { "Code<\(n)>" }
}
print(String(reflecting: Code(n: 7))) // Code<7>ลักษณะการทำงานสำรอง
หากชนิดข้อมูลมีเพียง description, debugPrint จะใช้คุณสมบัตินี้เป็นทางเลือกสำรอง หากมีเพียง debugDescription, print แบบปกติยังคงใช้รูปแบบมิเรอร์เริ่มต้น:
struct Only: CustomStringConvertible {
let v: Int
var description: String { "Only(\(v))" }
}
debugPrint(Only(v: 3)) // Only(3) -- falls back to descriptionการใส่เครื่องหมายคำพูดในผลลัพธ์การแก้จุดบกพร่อง
โปรดสังเกตว่า debugPrint ของ String จะเพิ่มเครื่องหมายคำพูด เนื่องจากเป็นลักษณะของผลลัพธ์เพื่อการแก้จุดบกพร่อง:
print("hi") // hi
debugPrint("hi") // "hi"ข้อมูลวินิจฉัยโดยไม่เปิดเผยความลับ
อย่าใส่ข้อมูลลับไว้ใน description แต่จะใส่ไว้ใน debugDescription ได้ก็ต่อเมื่อบันทึกการทำงานมีความปลอดภัย ควรเลือกอย่างรอบคอบว่าแต่ละคุณสมบัติจะแสดงข้อมูลใด
struct Key: CustomStringConvertible {
let secret: String
var description: String { "Key(***)" }
}
print(Key(secret: "abc")) // Key(***)รายละเอียดการแก้จุดบกพร่องสำหรับอีนัม
อีนัมจะได้ประโยชน์จาก debugDescription ที่แสดงเคสและข้อมูลที่แนบมาแบบดิบ:
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)ตรวจสอบความเข้าใจอย่างรวดเร็ว
ฟังก์ชันใดใช้ debugDescription แทน description?
สรุป
คุณได้เรียนรู้เกี่ยวกับ CustomDebugStringConvertible:
- กำหนด
var debugDescription: Stringสำหรับผลลัพธ์เพื่อการวินิจฉัย - ใช้โดย
debugPrint,String(reflecting:)และเครื่องมือแก้จุดบกพร่อง printใช้descriptionส่วนdebugPrintใช้debugDescription- ใส่รายละเอียดภายในเพิ่มเติมไว้ในผลลัพธ์การแก้จุดบกพร่อง และใส่ข้อความที่สะอาดไว้ใน description
ถัดไป: การตรวจสอบด้วย Mirror
คำถามที่พบบ่อย
บทเรียน “CustomDebugStringConvertible” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “CustomDebugStringConvertible” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “CustomDebugStringConvertible”
จัดเตรียมผลลัพธ์การแก้ไขข้อบกพร่องที่ละเอียดขึ้น คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “CustomDebugStringConvertible” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- CustomStringConvertible
- CustomDebugStringConvertible
- การสะท้อนด้วย Mirror
- การสร้างชนิดที่สะดวกต่อการแก้ไขข้อบกพร่อง