لماذا يجب على Swift "معرفة" اللغات الأخرى؟
\n\nتخيل أنك طاهٍ رئيسي في مطعم راقٍ. لديك سكينك الخاص (Swift) - حاد، مريح، يناسب يدك تمامًا. ولكن لتقطيع سمكة الفوجو، تحتاج إلى مشرط خاص (C)، ولتحضير موس مثالي - خلاط باهظ الثمن (Python). ألن تقوم بتقطيع السمك بالسكين الرئيسي؟ هكذا هو الحال في البرمجة: تكامل Swift مع اللغات الأخرى ليس علامة ضعف، بل قمة الإتقان.
\n\nنظام Swift البيئي يتطور بسرعة، لكنه لا يوجد في فراغ. مكتبات التعلم الآلي مكتوبة بلغة Python، والمحللات عالية الأداء بلغة C، وكود الأنظمة المصرفية القديم بلغة C++. القدرة على دمج هذه العوالم تفتح أمام المطور إمكانيات هائلة. في هذه المقالة، سنناقش ثلاثة سيناريوهات رئيسية: كيفية جعل Swift يتعاون مع Python و C و C++.
\n\n1. Swift + Python: سحر PythonKit
\n\nلن تكون Apple على طبيعتها إذا لم تجعل التكامل "سويفتيًا" قدر الإمكان. PythonKit هو إطار عمل يسمح باستدعاء كود Python مباشرة من Swift، كما لو كانت دوالًا أصلية. التثبيت بسيط:只需 إضافة تبعية عبر Swift Package Manager.
\n\nإعداد المشروع
\n\nأضف إلى Package.swift:
let package = Package(\n name: "MySwiftPythonApp",\n dependencies: [\n .package(url: "https://github.com/pvieito/PythonKit.git", branch: "master")\n ],\n targets: [\n .target(name: "MySwiftPythonApp", dependencies: ["PythonKit"])\n ]\n)\n\nمثال: حساب أرقام فيبوناتشي
\n\nلنفترض أن لديك سكريبت Python فائق التحسين لحساب فيبوناتشي. لماذا إعادة كتابته بلغة Swift إذا كان يمكن استدعاؤه مباشرة؟
\n\nملف Python (fib.py):
\ndef fib(n):\n a, b = 0, 1\n for _ in range(n):\n a, b = b, a + b\n return a\n\nكود Swift:
\nimport PythonKit\n\n// 1. تحميل الوحدة (بدون .py)\nlet fibModule = try Python.attemptImport("fib")\n\n// 2. استدعاء الدالة\nlet result = fibModule.fib(10)\nprint("الرقم العاشر في فيبوناتشي:", result) // الإخراج: 55\n\n// 3. العمل مع numpy (إذا كان مثبتًا)\nlet np = Python.import("numpy")\nlet array = np.array([1, 2, 3, 4])\nprint(array * 2) // الإخراج: [2 4 6 8]\n\nلاحظ: Python.attemptImport هو غلاف آمن. إذا لم يتم العثور على الوحدة، ستحصل على خطأ وليس تعطل التطبيق. تكامل Swift و Python عبر PythonKit يعمل على كل من macOS و Linux (بشرط توفر Python 3.x).
متى تحتاج هذا؟
\n- \n
- تحتاج مكتبة غير موجودة بلغة Swift (مثل
pandasأوscikit-learn). \n - تكتب تطبيق خادم باستخدام Vapor وتريد استخدام Python لعمليات ETL. \n
- تقوم بنمذجة أولية لنموذج تعلم آلي بلغة Python ثم تدمجه في تطبيق iOS. \n
2. Swift + C: محادثة مباشرة مع "العتاد"
\n\nC هي لغة أسطورية. بها كُتبت نوى أنظمة التشغيل، وبرامج التشغيل، ونصف عالم Unix. تم تصميم Swift ليكون التوافق مع C غير مؤلم قدر الإمكان. يمكنك استدعاء الدوال من أي مكتبة C دون استخدام أغلفة.
\n\nاستيراد دوال C
\n\nأنشئ ملفًا bridge.h وأضف فيه الرؤوس المطلوبة:
// bridge.h\n#include <math.h>\n#include <string.h>\n\nالآن في Swift يمكنك استخدام هذه الدوال مباشرة:
\n// Swift\nimport Foundation\n\nlet angle = 45.0 * .pi / 180.0\nlet sine = sin(angle) // دالة C من math.h\nprint("جيب الزاوية 45°:", sine)\n\n// العمل مع المؤشرات\nlet str = "Hello, C!"\nstr.withCString { cString in\n let length = strlen(cString) // دالة C\n print("طول السلسلة:", length)\n}\n\nإنشاء مكتبة C خاصة بك
\n\nافترض