0Pricing
Swift Academy · درس

الانعكاس باستخدام Mirror

افحص خصائص أي قيمة أثناء التشغيل.

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

ما هو Mirror؟

إنّ Mirror هو انعكاس وقت التشغيل في Swift، إذ يتيح لكم فحص بنية قيمة ما — خصائصها وقيمها — من دون معرفة نوعها الفعلي في وقت الترجمة.

إنشاء Mirror

مرّروا أي قيمة إلى Mirror(reflecting:):

struct Point { let x: Int; let y: Int }
let m = Mirror(reflecting: Point(x: 1, y: 2))
print(m.children.count)  // 2

التكرار على الأبناء

كل ابن هو زوج يتكوّن من تسمية وقيمة:

struct User { let name: String; let age: Int }
let m = Mirror(reflecting: User(name: "Ann", age: 30))
for child in m.children {
    print("\(child.label ?? "?") = \(child.value)")
}
// name = Ann
// age = 30

إنشاء Dictionary للحقول

يمكن للانعكاس تحويل بنية إلى قاموس:

struct Config { let host: String; let port: Int }
let m = Mirror(reflecting: Config(host: "x", port: 80))
var dict: [String: Any] = [:]
for c in m.children { if let l = c.label { dict[l] = c.value } }
print(dict["port"]!)  // 80

displayStyle

يُبلغ Mirror عن displayStyle — مثل .struct و.class و.enum و.tuple و.collection وغير ذلك — حتى تتمكنوا من تحديد نوع القيمة واتخاذ إجراء بناءً عليه.

فحص نمط العرض

حدّد نوع القيمة التي تفحصها انعكاسيًا:

struct S { let a = 1 }
let m = Mirror(reflecting: S())
if m.displayStyle == .struct {
    print("it is a struct with \(m.children.count) field(s)")
}
// it is a struct with 1 field(s)

فحص tuple بالانعكاس

تُظهر tuples أبناءها بحسب مواضعها:

let m = Mirror(reflecting: (10, "hi", true))
for c in m.children { print(c.value) }
// 10
// hi
// true

فحص التعدادات

في حالات enum التي تحمل قيمًا مرتبطة، يحمل الابن الحمولة:

enum Result2 { case ok(Int); case fail(String) }
let m = Mirror(reflecting: Result2.ok(42))
print(m.children.first?.value ?? "none")  // 42

طابع عام للحقول

يتيح الانعكاس إنشاء أدوات لا تعتمد على نوع محدد:

func dump2(_ value: Any) {
    for c in Mirror(reflecting: value).children {
        print("\(c.label ?? "_"): \(c.value)")
    }
}
struct Car { let make: String; let year: Int }
dump2(Car(make: "Mini", year: 2020))
// make: Mini
// year: 2020

تكاليف الانعكاس وحدوده

يكون استخدام Mirror أبطأ من الوصول المباشر، كما أنه للقراءة فقط — فلا يمكنك تعيين الخصائص من خلاله. استخدمه للتصحيح وتسجيل السجلات ومساعدات التسلسل، وليس في المسارات شديدة التكرار.

struct P { let v: Int }
let m = Mirror(reflecting: P(v: 5))
print(m.children.first!.value)  // 5  (read only)

تحويل القيم التي يفحصها الانعكاس

تكون قيم الأبناء من النوع Any؛ أعد تحويلها إلى نوعها المحدد عند الحاجة:

struct Box { let count: Int; let label: String }
let m = Mirror(reflecting: Box(count: 3, label: "hi"))
for c in m.children {
    if let n = c.value as? Int { print("int: \(n)") }
    if let s = c.value as? String { print("str: \(s)") }
}
// int: 3
// str: hi

تحقق سريع

ماذا يمنحك تكرار Mirror(reflecting: value).children؟

مراجعة

لقد تعلّمت استخدام Mirror:

  • يفحص Mirror(reflecting:) قيمةً أثناء التشغيل
  • تُرجع children أزواجًا من التسمية والقيمة
  • يُخبرك displayStyle ما إذا كان النوع struct أو class أو enum أو tuple أو collection
  • هو للقراءة فقط وأبطأ — ومفيد للتصحيح والتسلسل، وليس للمسارات شديدة التكرار

التالي: بناء أنواع سهلة التصحيح.

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

هل درس «الانعكاس باستخدام Mirror» مجاني؟

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

ماذا ستتعلم في «الانعكاس باستخدام Mirror»؟

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

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

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

كم من الوقت يستغرق درس «الانعكاس باستخدام Mirror»؟

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

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

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

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

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