# لغة Swift في Maguyva: رسوم بيانية للشيفرة في iOS وmacOS

Canonical source: https://maguyva.ai/ar/languages/swift

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

يدعم Maguyva لغة Swift بشجرة AST والرموز والرسم البياني، ليتمكن وكلاء الذكاء الاصطناعي من تتبّع البروتوكولات والامتدادات والمُهيِّئات والمراقِبات في شيفرة iOS وmacOS.

## لمحة عن الدعم

- المستوى: دعم AST والرموز
- البرمجة
- الامتدادات: .swift
- تحليل AST حقيقي لبحث واعٍ بالصياغة النحوية وسياق بنيوي.
- تُغذّي الرموز المسمّاة البحث الدلالي والمراجع المتقاطعة. ويتوفر التنقل عبر الرسم البياني عند تمكين استخراج العلاقات.
- تُسهم هذه اللغة بالرموز والعلاقات في البحث المراعي لبنية الرسم البياني؛ وتختلف أنواع الحواف المدعومة بحسب التراكيب الأصلية في اللغة.
- يتوفر كل من تحليل AST واستخلاص الرموز.

## الأنسب لـ

- فرق iOS وmacOS ذات أهداف التطبيقات الكبيرة وحزم Swift المشتركة.
- قواعد الشيفرة المبنية حول البروتوكولات والامتدادات، حيث يتوزّع سلوك النوع على ملفات كثيرة.
- سير عمل الوكلاء الذي يحتاج إلى تحليل الأثر قبل تغيير نموذج أو خدمة أو بروتوكول مشترك.

## سير عمل الوكلاء

- العثور على كل نوع يتوافق مع بروتوكول قبل تغيير أحد متطلباته.
- تتبّع من يستدعي أسلوب خدمة عبر ViewModels والمنسّقين والحزم.
- العثور على المُهيِّئات والخصائص المحسوبة ومراقِبات `didSet` التي تمسّ حالة ما.

## لماذا تحتاج Swift إلى أكثر من البحث في الملفات

توزّع Swift النوع الواحد على أماكن كثيرة. يُصرَّح عن struct في ملف، ويكتسب سلوكًا من امتدادات في ثلاثة ملفات أخرى، ويتوافق مع بروتوكولات معرّفة في حزمة. وتختبئ تغييرات الحالة في الخصائص المحسوبة ومراقِبات `willSet` / `didSet`. الوكيل الذي يقرأ ملفًا واحدًا في كل مرة يفوته معظم ذلك.

يفهرس Maguyva هذه البنية، فيرى الوكيل أعضاء النوع وتوافقاته ومستدعيه معًا.

## ما الذي يستخرجه Maguyva من Swift

يغطي Maguyva الملفات `.swift`. تشمل الرموز القابلة للاستدعاء الدوال و`init` و`deinit` والمفهرِسات (subscripts) ودوال الجلب والتعيين للخصائص المحسوبة ومراقِبات `willSet` / `didSet`، فتصبح الشيفرة التي تغيّر الحالة قابلة للبحث كرموز بدل أن تضيع داخل أجسام الخصائص.

تُؤهَّل الأعضاء المصرَّح عنها في structs وenums والبروتوكولات والامتدادات بنوعها المالك (مثل `CartStore.add`)، وتُنسب الأعضاء المضافة في امتداد إلى النوع المُمتَد. وتُحذف المعاملات العامة وقوائم التوافق مع البروتوكولات واللواحق `?` / `!` من أسماء التعريفات، فتستخدم عمليات البحث الاسم المجرّد. وتحتفظ الاستدعاءات بـ `self.` وبمؤهِّل الفئة، وتُحتسب الإغلاقات الختامية ضمن عدد وسائط الاستدعاء.

يسجّل الرسم البياني الاستدعاءات والتوافق مع البروتوكولات والوراثة والتجاوزات وإنشاء المثيلات والسمات ومراجع الأنواع والقراءات والكتابات وحواف `throw`.

## أمثلة على مطالبات الوكلاء

- "ما الأنواع التي تتوافق مع `PaymentProvider`، وأين يُنشأ كل منها؟" (`dependency_search`)
- "من يستدعي `CartStore.add`، ومن أي واجهات عرض؟" (`find_symbol` ثم `dependency_search` في الاتجاه الوارد)
- "اشرح كيف يصل الإشعار الفوري إلى شاشة صندوق الوارد." (`get_task_context`)

## القيود المعروفة

- لا يُربط إلا الشيفرة المصدرية `.swift`. ملفات Storyboard وXIB ليست في قائمة الامتدادات، لذا تبقى روابط Interface Builder خارج الرسم البياني.
- يُستبعد من العلاقات استدعاءات المكتبة القياسية وFoundation مثل `print` و`debugPrint` و`NSLog` والتأكيدات، لذا فهي ليست حوافَّ في الرسم البياني. استخدم `text_pattern_search` لها.

## الخطوات التالية

اربط مستودعًا عبر [دليل البدء السريع](/ar/docs/quickstart)، ثم راجع مصفوفة الدعم في [صفحة التوافق](/ar/docs/compatibility). وإذا كنت تطلق المنتج نفسه على Android، فاقرأ [دليل لغة Kotlin](/ar/languages/kotlin).

## تفاصيل المحرك

- تشمل الرموز القابلة للاستدعاء الدوال و`init` و`deinit` والمفهرِسات ودوال الجلب والتعيين للخصائص المحسوبة ومراقِبات `willSet` / `didSet`.
- تُؤهَّل أعضاء structs وenums والبروتوكولات والامتدادات بنوعها المالك، مثل `CartStore.add`.
- تُحذف المعاملات العامة وقوائم التوافق مع البروتوكولات واللواحق `?` / `!` من أسماء التعريفات، وتحتفظ الاستدعاءات بـ `self.` وبمؤهِّل الفئة.

## نقاط دخول مفيدة عبر MCP

- `find_symbol`: استخدمه مع اسم نوع أو بروتوكول أو أسلوب حين تحتاج إلى التعريف والمراجع.
- `dependency_search`: استخدمه على بروتوكول للعثور على الأنواع المتوافقة، أو في الاتجاه الوارد على أسلوب للعثور على المستدعين.
- `get_task_context`: استخدمه لمطالبات مثل «اشرح كيف يصل الإشعار الفوري إلى شاشة صندوق الوارد».
