-
Explora la interoperabilidad de Swift y Java
Descubre cómo puedes combinar Swift y Java en una única base de código. Presentaremos el proyecto de interoperabilidad swift-java, que te permite usar Swift en programas Java o viceversa. Mostraremos cómo usar las herramientas y bibliotecas de swift-java para escribir código seguro y eficaz que interopere entre estos tiempos de ejecución.
Capítulos
- 0:00 - Introducción y agenda
- 2:41 - Diferencias en el tiempo de ejecución
- 3:31 - Métodos nativos de Java
- 6:29 - SwiftJava
- 10:13 - Convoca Java desde Swift
- 14:01 - Convoca Swift desde Java
- 20:47 - Conclusión
Recursos
Videos relacionados
WWDC25
- Mejora el uso y el rendimiento de la memoria con Swift
- Mezcle de forma segura C, C++ y Swift
- Novedades de Swift
WWDC23
-
Buscar este video…
-
-
9:05 - Implement JNI native methods in Swift
import JavaKit import JavaRuntime import Crypto @JavaImplementation("com.example.JNIExample") extension JNIExample: JNIExampleNativeMethods { @JavaMethod func compute(_ a: JavaInteger?, _ b: JavaInteger?) -> [UInt8] { guard let a else { fatalError("Expected non-null parameter 'a'") } guard let a else { fatalError("Expected non-null parameter 'b'") } let digest = SHA256Digest([a.intValue(), b.intValue()]) // convenience init defined elsewhere return digest.toArray() } } -
12:30 - Resolve Java dependencies with swift-java
swift-java resolve --module-name JavaApacheCommonsCSV -
13:05 - Use a Java library from Swift
import JavaKit import JavaKitIO import JavaApacheCommonsCSV let jvm = try JavaVirtualMachine.shared() let reader = FileReader("sample.csv") // java.io.StringReader for record in try JavaClass<CSVFormat>().RFC4180.parse(reader)!.getRecords()! { for field in record.toList()! { // Field: hello print("Field: \(field)") // Field: example } // Field: csv } print("Done.") -
16:22 - Wrap Swift types for Java
swift-java --input-swift Sources/SwiftyBusiness \ --java-package com.example.business \ --output-swift .build/.../outputs/SwiftyBusiness \ --output-java .build/.../outputs/Java ... -
18:55 - Create Swift objects from Java
try (var arena = SwiftArena.ofConfined()) { var business = new SwiftyBusiness(..., arena); }
-
-
- 0:00 - Introducción y agenda
Obtén información sobre una biblioteca de lenguaje Swift experimental, llamada “swift-java”, que permite que Swift funcione sin problemas con Java, que aprovecha las funcionalidades de interoperabilidad existentes con Objective-C, C y C++. Esta interoperabilidad te permite introducir Swift de forma incremental en bases de código Java existentes, reutilizar bibliotecas en distintos lenguajes e integrar bibliotecas Swift con proyectos Java. La interoperabilidad proporcionada por “swift-java” admite la invocación a código Java desde Swift y viceversa, y el equipo está trabajando en herramientas y técnicas para manejar las diferencias entre los tiempos de ejecución de Java y Swift, y proporcionar una mejor seguridad de memoria para el código Java traducido a tipos Swift.
- 2:41 - Diferencias en el tiempo de ejecución
Swift y Java comparten funcionalidades comunes como clases, herencia, administración automática de memoria, genéricos y manejo de errores, aunque existen diferencias en el tiempo de ejecución. A pesar de estas diferencias de tiempo de ejecución, las similitudes entre ambos lenguajes permiten la expresión de la mayoría de las API de un lenguaje en el otro.
- 3:31 - Métodos nativos de Java
La API Java Native Interface (JNI) se presentó a principios de 1997 y permite que el código Java que se ejecuta dentro de una máquina virtual Java (JVM) interopere con código nativo, como Swift. Esto se hace a menudo para mejorar el rendimiento o usar bibliotecas nativas sin equivalentes de Java. Para usar JNI, se define una función “nativa” en Java y se genera un archivo de encabezado C correspondiente. Este archivo de encabezado contiene una declaración de función C que debe implementarse en el lenguaje nativo, como Swift. El proceso implica administrar la vida útil de los objetos, hacer coincidir firmas de métodos y manejar código de plantilla verboso, que puede ser propenso a errores y consumir mucho tiempo, lo que puede provocar fallos fatales.
- 6:29 - SwiftJava
SwiftJava mejora la interoperabilidad entre los lenguajes Swift y Java. Proporciona un conjunto de herramientas, incluidas bibliotecas Swift y Java, una herramienta de línea de comandos e integraciones de sistemas de compilación, para simplificar y asegurar la interacción entre los dos lenguajes. La herramienta de línea de comandos “swift-java” automatiza la generación de código puente, lo que elimina la necesidad de interacción manual con el encabezado C. Esto da como resultado un código más limpio y más fácil de mantener con una mejor administración de la vida útil de los objetos y seguridad de tipos. Ahora puedes centrarte en la lógica empresarial, aprovechando todo el poder de los ecosistemas Swift y Java y evitando los errores y las dificultades comunes asociados con la implementación manual de JNI.
- 10:13 - Convoca Java desde Swift
SwiftJava permite la integración de bibliotecas Java en proyectos Swift. Para importar una biblioteca Java completa, como Apache Commons CSV, prepara las siguientes coordenadas de artefacto: “groupId”, “artifactId” y ”versión”. Luego, SwiftJava usa Gradle, un sistema de compilación de código abierto, para resolver las dependencias Java. Hay dos métodos para descargar y abstraer las dependencias Java: Usando el complemento de la herramienta de compilación SwiftJava, que requiere deshabilitar entorno aislado de seguridad de SwiftPM, o mediante el comando “resolve” de la herramienta de línea de comandos “swift-java”, que realiza la resolución fuera del proceso de compilación. Una vez resueltas las dependencias Java, puedes importar la biblioteca Java en Swift, iniciar la JVM dentro del proceso de Swift y usar sin problemas el código y las colecciones de Java junto con las funcionalidades de Swift, con JavaKit manejando la administración de la vida útil de los objetos.
- 14:01 - Convoca Swift desde Java
SwiftJava permite la integración de bibliotecas Swift en proyectos Java. Para lograrlo, en esta sesión de WWDC25 se presenta un nuevo enfoque que evita la necesidad de extensas funciones envolventes en el lado de Java. En cambio, toda la biblioteca Swift está envuelta con clases Java que utilizan la nueva API Foreign Function and Memory (FFI) presentada en Java 22. FFI proporciona un control mejorado sobre la memoria nativa y permite una integración profunda entre los tiempos de ejecución de Java y Swift y los sistemas de administración de memoria. Al utilizar FFI, el proceso de invocar a código Swift desde Java se vuelve más eficiente y seguro. La herramienta de línea de comandos “swift-java” se usa para generar las clases Java y el código auxiliar Swift necesarios. Esta herramienta automatiza la generación de código de plantilla, haciendo que el proceso sea más sencillo. Las clases Java generadas sirven como accesores para los tipos y las funciones de Swift, lo que expone efectivamente la funcionalidad de la biblioteca Swift a Java. La administración adecuada de la memoria es fundamental cuando se trabaja con objetos Swift nativos en Java. El debate destaca dos enfoques: utilizar un “AutoArena” que se basa en el Recolector de basura de Java (GC) y usar un método preferido que utiliza “try-with-resources” y un “ConfinedArena”. El último enfoque garantiza una desinicialización de objetos bien definida y ordenada, lo que evita problemas de rendimiento y sobrecarga el GC. Esta técnica le permite crear y publicar bibliotecas Java encapsuladas en Swift, lo que las hace fácilmente consumibles en proyectos Java. Esto simplifica la adopción de Swift dentro de equipos que ya tienen una fuerte presencia de Java, lo que fomenta un entorno de desarrollo más flexible y eficiente. El desarrollo continuo de SwiftJava tiene como objetivo pulir y refinar aún más estas técnicas, y proporcionar una solución sólida para la interoperabilidad entre los dos lenguajes.
- 20:47 - Conclusión
El lenguaje de programación Swift es de código abierto y está alojado en GitHub, así como en bibliotecas como SwiftJava. La comunidad está activa en los foros de Swift, donde puedes aprender, compartir ideas y hacer comentarios.