¿Cuál es la mejor manera de usar una biblioteca Rust en código Swift?
ffi (1)
Me gustaría poder usar los objetos de Rust en Swift, de alguna manera notificar a Swift cuando cambian los eventos / eventos de Rust, y aprovechar el ARC de Swift para mantener los objetos de Rust vivos.
Hasta ahora, lo que me viene a la mente es escribir una API de C simple para los objetos de Rust, luego escribir un envoltorio de Objective-C para la API de C y luego exportarlo a Swift, como esto:
¿Hay una manera menos tediosa? ¿Algo que pueda generar automáticamente funciones de envoltorio y archivos de encabezado C?
Estoy trabajando en un proyecto similar a este ahora (portando una biblioteca de C ++ para que funcione en iOS y Android)
La única forma sensata de hacer esto es extern "C"
externamente las interfaces de Rust y escribir un archivo .h simple para ello, y crear un ajuste de clase ObjC simple para ellos. Luego, #import <someframework/someframework.h>
el #import <someframework/someframework.h>
en el encabezado de enlace de Objective C to Swift y todo funcionará.
Es un poco tedioso, pero en realidad no es tanto trabajo en la práctica. Solo se vuelve doloroso si intentas transferir objetos complejos a través de los límites, lo que resulta en la escritura de un montón de estructuras, y luego todo va cuesta abajo. Te aconsejo en contra de eso, apégate a los primitivos y matrices.
Si su modelo es más complejo que eso, considere algo como IPC, como han dicho otros, aunque eso podría ser mucho más doloroso en la práctica.
Así que sí, tedioso. Sin embargo, la buena noticia es que esto realmente funciona. :)