كيفية استيراد كود Swift إلى Objective-C: دليل خطوة بخطوة مع أمثلة واقعية
\n\nهل سبق لك أن وجدت نفسك في موقف تحتاج فيه إلى إضافة وحدة Swift جديدة إلى مشروع Objective-C قديم؟ أو ربما يقوم فريقك بالترحيل تدريجياً من Objective-C إلى Swift، ولكنك مضطر للعمل في وضع هجين؟ إذا كان الأمر كذلك، فأنت في المكان الصحيح. سؤال «How can I import Swift code to Objective-C?» هو من أكثر الأسئلة شيوعاً على Stack Overflow (عشرات الآلاف من المشاهدات)، ولا عجب: حتى المطورون ذوو الخبرة يخلطون أحياناً في إعداد الجسر بين اللغتين.
\n\nفي هذه المقالة، سنشرح كيفية استيراد كود Swift إلى Objective-C بشكل صحيح، وما هي المزالق التي تنتظرك، وكيف لا تحول مشروعك إلى لغز. هيا بنا!
\n\nلماذا لا يزال Swift و Objective-C يعيشان معاً؟
\n\nيعتقد الكثيرون أنه مع ظهور Swift، تخلى الجميع عن Objective-C وانتقلوا إلى اللغة الجديدة. الواقع أكثر تعقيداً. آلاف المشاريع الكبيرة (بما في ذلك تطبيقات البنوك ومواقع التواصل الاجتماعي والأنظمة المؤسسية) مكتوبة بلغة Objective-C، وإعادة كتابتها بالكامل مهمة تستغرق سنوات. لذلك وفرت Apple آلية للتفاعل: يمكنك كتابة ميزات جديدة بلغة Swift، وترك الكود القديم بلغة Objective-C.
\n\nالمشكلة الرئيسية: Swift و Objective-C عالمين مختلفين. يتم تجميع Swift إلى تنسيق ثنائي خاص به، و Objective-C إلى تنسيقه الخاص. لكي يتمكن كل منهما من «رؤية» الآخر، هناك حاجة إلى جسر خاص — bridging header لاستيراد Objective-C إلى Swift، وملف رأس تم إنشاؤه تلقائياً لاستيراد Swift إلى Objective-C.
مخطط العمل: كيف يرى Swift Objective-C والعكس
\n\nدعنا نوضح الاتجاه فوراً:
\n\n- \n
- Objective-C → Swift: نستخدم الملف المُنشأ
ProductModuleName-Swift.h(حيث ProductModuleName هو اسم الوحدة الخاصة بك). \n - Swift → Objective-C: نستخدم bridging header (
ProjectName-Bridging-Header.h). \n
اليوم نحن مهتمون بالخيار الأول. ولكن لفهم الصورة الكاملة، من المفيد معرفة كليهما.
\n\nالخطوة 1: إعداد المشروع للعمل المشترك
\n\nقبل استيراد كود Swift إلى Objective-C، تأكد من أن مشروعك مهيأ بشكل صحيح. إذا كنت تنشئ مشروعاً من الصفر وتخطط فوراً لبنية هجينة — فالأمر بسيط. إذا كان المشروع موجوداً بالفعل بلغة Objective-C — فأنت بحاجة إلى إضافة دعم Swift.
\n\nتحقق من إعدادات Build Settings
\n\nافتح إعدادات الهدف (Target) الخاص بك في Xcode وابحث عن المعامل «Defines Module». يجب أن يكون مضبوطاً على Yes. إذا لم يكن موجوداً — أضفه يدوياً:
// Build Settings → Packaging → Defines Module = YES\n\nثم ابحث عن «Product Module Name» — هذا هو الاسم الذي سيتم استخدامه في ملف الرأس المُنشأ. افتراضياً، يتطابق مع اسم المشروع، ولكن يمكنك تغييره (على سبيل المثال، MyApp).
أنشئ bridging header (إذا لم يكن موجوداً)
\n\nعند إضافة ملف Swift لأول مرة إلى مشروع Objective-C، سيعرض Xcode إنشاء bridging header. وافق. إذا فاتتك هذه اللحظة — أنشئ الملف يدوياً: New File → Header File وسمِّه YourProjectName-Bridging-Header.h. ثم حدد المسار إليه في الإعدادات:
// Build Settings → Swift Compiler - General → Objective-C Bridging Header\n// مثال: $(SRCROOT)/$(PROJECT_NAME)/YourProjectName-Bridging-Header.h\n\nالخطوة 2: كتابة كلاس Swift سيكون متاحاً من Objective-C
\n\nليس كل كلاس Swift سيكون «مرئياً» تلقائياً لـ Objective-C. هناك عدة متطلبات إلزامية:
\n\n- \n
- يجب أن يرث الكلاس من
NSObject(أو كلاس Objective-C آخر). \n - جميع الخصائص والطرق التي تريد استدعاءها من Objective-C يجب أن تكون موسومة بـ
@objcالمدونات
توصيات الكتب
اقرأ أيضًا