Swift habla todos los idiomas: guía de integración con Python, C y más

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Por qué Swift debería "conocer" otros lenguajes?

\n\n

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

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

1. Swift + Python: la magia de PythonKit

\n\n

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

Configuración del proyecto

\n\n

Agregue en 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

Ejemplo: calculando números de Fibonacci

\n\n

Supongamos que tiene un script de Python súper optimizado para calcular Fibonacci. ¿Por qué reescribirlo en Swift si puede llamarlo directamente?

\n\n

Archivo 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

Código Swift:

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

Tenga 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).

\n\n

¿Cuándo se necesita?

\n
    \n
  • Necesita una biblioteca que no existe en Swift (por ejemplo, pandas o scikit-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
\n\n

2. Swift + C: conversación directa con el "hardware"

\n\n

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

Importación de funciones C

\n\n

Cree un archivo bridge.h y escriba los encabezados necesarios:

\n
// bridge.h\n#include <math.h>\n#include <string.h>
\n\n

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

Creación de su propia biblioteca C

\n\n

Supo

Blogs

Book Recommendations