¿Por qué Swift debería "conocer" otros lenguajes?
\n\nImagine que es un chef en un restaurante de alta cocina. Tiene un cuchillo de marca (Swift): afilado, ergonómico, perfecto en la mano. Pero para filetear un pez globo, necesita un bisturí especial (C), y para crear un mousse perfecto, una batidora cara (Python). ¿Acaso picaría el pescado con el cuchillo principal? Pues en programación es igual: la integración de Swift con otros lenguajes no es una señal de debilidad, sino la cima del dominio.
\n\nEl ecosistema de Swift se desarrolla rápidamente, pero no existe en el vacío. Las bibliotecas de aprendizaje automático están escritas en Python, los analizadores de alto rendimiento en C y el código heredado de los sistemas bancarios en C++. La capacidad de unir estos mundos abre posibilidades cósmicas para el desarrollador. En este artículo, analizaremos tres escenarios clave: cómo hacer que Swift se lleve bien con Python, C y C++.
\n\n1. Swift + Python: la magia de PythonKit
\n\nApple no sería Apple si no hiciera la integración lo más "swift" posible. PythonKit es un framework que permite llamar código Python directamente desde Swift, como si fueran funciones nativas. La instalación es simple: solo agregue la dependencia a través de Swift Package Manager.
\n\nConfiguración del proyecto
\n\nAgregue en 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\nEjemplo: calculando números de Fibonacci
\n\nSupongamos que tiene un script de Python súper optimizado para calcular Fibonacci. ¿Por qué reescribirlo en Swift si puede llamarlo directamente?
\n\nArchivo 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\nCódigo Swift:
\nimport PythonKit\n\n// 1. Cargamos el módulo (sin .py)\nlet fibModule = try Python.attemptImport("fib")\n\n// 2. Llamamos a la función\nlet result = fibModule.fib(10)\nprint("10º número de Fibonacci:", result) // Salida: 55\n\n// 3. Trabajamos con numpy (si está instalado)\nlet np = Python.import("numpy")\nlet array = np.array([1, 2, 3, 4])\nprint(array * 2) // Salida: [2 4 6 8]\n\nTenga en cuenta: Python.attemptImport es un envoltorio seguro. Si el módulo no se encuentra, obtendrá un error, no un bloqueo de la aplicación. La integración de Swift y Python a través de PythonKit funciona tanto en macOS como en Linux (con Python 3.x instalado).
¿Cuándo se necesita?
\n- \n
- Necesita una biblioteca que no existe en Swift (por ejemplo,
pandasoscikit-learn). \n - Está escribiendo una aplicación de servidor en Vapor y desea usar Python para procesos ETL. \n
- Está prototipando un modelo de ML en Python y luego lo integra en una aplicación iOS. \n
2. Swift + C: conversación directa con el "hardware"
\n\nC es un lenguaje legendario. En él están escritos los núcleos de los SO, los controladores y la mitad del universo Unix. Swift está diseñado para que la interoperabilidad con C sea lo más fluida posible. Puede llamar funciones de cualquier biblioteca C sin usar envoltorios.
\n\nImportación de funciones C
\n\nCree un archivo bridge.h y escriba los encabezados necesarios:
// bridge.h\n#include <math.h>\n#include <string.h>\n\nAhora en Swift puede usar estas funciones directamente:
\n// Swift\nimport Foundation\n\nlet angle = 45.0 * .pi / 180.0\nlet sine = sin(angle) // Función C de math.h\nprint("Seno de 45°:", sine)\n\n// Trabajo con punteros\nlet str = "¡Hola, C!"\nstr.withCString { cString in\n let length = strlen(cString) // Función C\n print("Longitud de la cadena:", length)\n}\n\nCreación de su propia biblioteca C
\n\nSupo