Swift يتحدث جميع اللغات: دليل التكامل مع Python و C وغيرها

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

لماذا يجب على Swift "معرفة" اللغات الأخرى؟

\n\n

تخيل أنك طاهٍ رئيسي في مطعم راقٍ. لديك سكينك الخاص (Swift) - حاد، مريح، يناسب يدك تمامًا. ولكن لتقطيع سمكة الفوجو، تحتاج إلى مشرط خاص (C)، ولتحضير موس مثالي - خلاط باهظ الثمن (Python). ألن تقوم بتقطيع السمك بالسكين الرئيسي؟ هكذا هو الحال في البرمجة: تكامل Swift مع اللغات الأخرى ليس علامة ضعف، بل قمة الإتقان.

\n\n

نظام Swift البيئي يتطور بسرعة، لكنه لا يوجد في فراغ. مكتبات التعلم الآلي مكتوبة بلغة Python، والمحللات عالية الأداء بلغة C، وكود الأنظمة المصرفية القديم بلغة C++. القدرة على دمج هذه العوالم تفتح أمام المطور إمكانيات هائلة. في هذه المقالة، سنناقش ثلاثة سيناريوهات رئيسية: كيفية جعل Swift يتعاون مع Python و C و C++.

\n\n

1. Swift + Python: سحر PythonKit

\n\n

لن تكون Apple على طبيعتها إذا لم تجعل التكامل "سويفتيًا" قدر الإمكان. PythonKit هو إطار عمل يسمح باستدعاء كود Python مباشرة من Swift، كما لو كانت دوالًا أصلية. التثبيت بسيط:只需 إضافة تبعية عبر Swift Package Manager.

\n\n

إعداد المشروع

\n\n

أضف إلى Package.swift:

\n\n
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):

\n
def fib(n):\n    a, b = 0, 1\n    for _ in range(n):\n        a, b = b, a + b\n    return a
\n\n

كود Swift:

\n
import 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

متى تحتاج هذا؟

\n
    \n
  • تحتاج مكتبة غير موجودة بلغة Swift (مثل pandas أو scikit-learn).
  • \n
  • تكتب تطبيق خادم باستخدام Vapor وتريد استخدام Python لعمليات ETL.
  • \n
  • تقوم بنمذجة أولية لنموذج تعلم آلي بلغة Python ثم تدمجه في تطبيق iOS.
  • \n
\n\n

2. Swift + C: محادثة مباشرة مع "العتاد"

\n\n

C هي لغة أسطورية. بها كُتبت نوى أنظمة التشغيل، وبرامج التشغيل، ونصف عالم Unix. تم تصميم Swift ليكون التوافق مع C غير مؤلم قدر الإمكان. يمكنك استدعاء الدوال من أي مكتبة C دون استخدام أغلفة.

\n\n

استيراد دوال C

\n\n

أنشئ ملفًا bridge.h وأضف فيه الرؤوس المطلوبة:

\n
// 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

افترض

المدونات

توصيات الكتب