Por que o Swift precisa "saber" outras linguagens?
\n\nImagine que você é um chef em um restaurante de elite. Você tem uma faca de marca (Swift) — afiada, ergonômica, encaixa perfeitamente na mão. Mas para cortar um peixe fugu, você precisa de um bisturi especial (C), e para criar um mousse perfeito, de um liquidificador caro (Python). Você não vai cortar o peixe com a faca principal, vai? Na programação é a mesma coisa: a integração do Swift com outras linguagens não é um sinal de fraqueza, mas o auge da maestria.
\n\nO ecossistema Swift está evoluindo rapidamente, mas não existe no vácuo. Bibliotecas de machine learning são escritas em Python, parsers de alta performance em C, e código legado de sistemas bancários em C++. Saber unir esses mundos abre possibilidades cósmicas para o desenvolvedor. Neste artigo, vamos analisar três cenários principais: como integrar Swift com Python, C e C++.
\n\n1. Swift + Python: a magia do PythonKit
\n\nA Apple não seria quem é se não tornasse a integração o mais "Swift-like" possível. PythonKit é um framework que permite chamar código Python diretamente do Swift, como se fossem funções nativas. A instalação é simples: basta adicionar a dependência via Swift Package Manager.
\n\nConfiguração do projeto
\n\nAdicione no 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\nExemplo: calculando números de Fibonacci
\n\nSuponha que você tenha um script Python super otimizado para calcular Fibonacci. Por que reescrevê-lo em Swift se pode chamá-lo diretamente?
\n\nArquivo 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. Carregamos o módulo (sem .py)\nlet fibModule = try Python.attemptImport("fib")\n\n// 2. Chamamos a função\nlet result = fibModule.fib(10)\nprint("10º número de Fibonacci:", result) // Saída: 55\n\n// 3. Trabalhamos com numpy (se instalado)\nlet np = Python.import("numpy")\nlet array = np.array([1, 2, 3, 4])\nprint(array * 2) // Saída: [2 4 6 8]\n\nObserve: Python.attemptImport é um wrapper seguro. Se o módulo não for encontrado, você receberá um erro, não um crash do aplicativo. A integração Swift e Python via PythonKit funciona tanto no macOS quanto no Linux (com Python 3.x instalado).
Quando isso é necessário?
\n- \n
- Você precisa de uma biblioteca que não existe em Swift (por exemplo,
pandasouscikit-learn). \n - Você está escrevendo um aplicativo servidor em Vapor e quer usar Python para processos ETL. \n
- Você está prototipando um modelo de ML em Python e depois o incorpora em um aplicativo iOS. \n
2. Swift + C: conversa direta com o "hardware"
\n\nC é uma linguagem lendária. Nela foram escritos os kernels de SO, drivers e metade do universo Unix. O Swift foi projetado para que a interoperabilidade com C seja o mais indolor possível. Você pode chamar funções de qualquer biblioteca C sem usar wrappers.
\n\nImportando funções C
\n\nCrie um arquivo bridge.h e coloque os cabeçalhos necessários:
// bridge.h\n#include <math.h>\n#include <string.h>\n\nAgora no Swift você pode usar essas funções diretamente:
\n// Swift\nimport Foundation\n\nlet angle = 45.0 * .pi / 180.0\nlet sine = sin(angle) // Função C de math.h\nprint("Seno de 45°:", sine)\n\n// Trabalhando com ponteiros\nlet str = "Olá, C!"\nstr.withCString { cString in\n let length = strlen(cString) // Função C\n print("Comprimento da string:", length)\n}\n\nCriando sua própria biblioteca C
\n\nSupo