standard library developers swift interop

swift - library - Genere una interfaz rápida desde el encabezado de Objective-C desde la línea de comando



swift version (1)

Invocar el comando de intérprete :type lookup en el módulo que está intentando inspeccionar.

Supongamos que tiene un archivo de encabezado llamado header.h . Póngalo en un directorio separado, para que el intérprete lo reconozca como un módulo. También crea un modulemap en el mismo directorio. Llamemos a este directorio Mod :

./ ./Mod/ /header.h /module.modulemap

Rellene el modulemap con lo siguiente:

module Mod { header "./header.h" export * }

Una vez hecho esto, ejecute un comando como este:

echo "import Mod/n:type lookup Mod" | swift -I./Mod | tail -n+2 >| generated-interface.swift

Alternativamente, puede usar un comando como este con el mismo efecto:

echo "import Mod/n:print_module Mod" | swift -deprecated-integrated-repl -I./Mod >| generated-interface.swift

Se desglosa de la siguiente manera:

  • En primer lugar, hacemos un eco del script que se va a ejecutar: importar el módulo y buscarlo;
  • luego lanzamos el intérprete y le introducimos el script; El argumento -I ayuda a encontrar nuestro módulo, que es crucial;
  • luego cortamos la parte "Bienvenido a Swift" con Tail
  • y escribe el resultado en generated-interface.swift .

Mientras ejecuta los comandos anteriores, asegúrese de que su directorio de trabajo esté configurado en un nivel más alto que el directorio Mod .

Tenga en cuenta que la salida podría no ser exactamente igual a la de Xcode, pero es muy similar.

Solo para el registro, si desea producir la interfaz a partir de un archivo Swift, entonces es solo esto:

swiftc -print-ast file.swift

En Xcode, para cualquier encabezado de Objective-C, podemos ver la Interfaz generada , que muestra cómo Swift lo ve en la interoperabilidad.

Me gustaría generar eso desde la línea de comando . ¿Alguna idea de cómo hacerlo?

Tarea de bonificación: el encabezado debe precompilarse primero, por lo que todos los #import s deben reemplazarse ya.