0Pricing
Swift Academy · درس

إنشاء أنواع سهلة التصحيح

اجمع بين الأوصاف والانعكاس بفعالية.

إنشاء أنواع سهلة التصحيح درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.

دمج الأدوات

تكون الأنواع الأفضل سهلة الفحص. ادمج بين CustomStringConvertible وCustomDebugStringConvertible وMirror لإنشاء قيم تُطبع بوضوح وتكشف تفاصيلها الداخلية عند الطلب.

وصف واضح

ابدأ بالمخرجات الموجهة إلى المستخدم:

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

إضافة debugDescription التشخيصي

أضف طبقة من التفاصيل للتصحيح:

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)

إنشاء description تلقائيًا باستخدام Mirror

استخدم الانعكاس لإنشاء وصف دون سرد كل حقل يدويًا:

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)

مساعد انعكاس قابل لإعادة الاستخدام

ضع منطق Mirror في دالة حرة حتى تتمكن أنواع متعددة من مشاركة منسّق تصحيح واحد.

مساعد describe مشترك

مساعد واحد يُعاد استخدامه في كل مكان:

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)

تنفيذ افتراضي للبروتوكول

وفّر تصحيحًا انعكاسيًا لعائلة كاملة من الأنواع من خلال إضافة امتداد إلى بروتوكول:

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]

طباعة القيم المتداخلة بتنسيق واضح

يتكرر الانعكاس طبيعيًا عندما تكون الأبناء نفسها قابلة للطباعة:

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))

استخدام Swift dump

تستخدم dump المضمّنة Mirror لطباعة شجرة عميقة ومسافة بادئة — وهي مفيدة للفحص السريع:

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

جمع كل الأجزاء

نوع متقن: وصف واضح، ومعلومات تصحيح غنية، وخطة بديلة انعكاسية — سهل التسجيل وسهل التصحيح.

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)

عدّ الحقول انعكاسيًا

يفيد الانعكاس أيضًا في التأكيدات البنيوية السريعة، مثل عدّ الخصائص:

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

تحقق سريع

كيف يمكنك إنشاء description دون سرد كل خاصية يدويًا؟

مراجعة

لقد تعلّمت بناء أنواع سهلة التصحيح:

  • ادمج بين description (الواضح) وdebugDescription (التفصيلي)
  • استخدم Mirror لإنشاء الأوصاف تلقائيًا من الأبناء
  • ضع الانعكاس في مساعد أو تنفيذ افتراضي للبروتوكول
  • تطبع dump شجرة انعكاسية عميقة للفحص السريع

اكتملت الدورة!

الأسئلة الشائعة

هل درس «إنشاء أنواع سهلة التصحيح» مجاني؟

نعم — نص درس «إنشاء أنواع سهلة التصحيح» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.

ماذا ستتعلم في «إنشاء أنواع سهلة التصحيح»؟

اجمع بين الأوصاف والانعكاس بفعالية. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟

لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «إنشاء أنواع سهلة التصحيح»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟

نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ‏CustomStringConvertible
  2. ‏CustomDebugStringConvertible
  3. الانعكاس باستخدام Mirror
  4. إنشاء أنواع سهلة التصحيح
← العودة إلى Swift Academy