-
Explore a interoperabilidade entre Swift e Java
Saiba como você pode usar o Swift e o Java juntos em uma única base de código. Vamos apresentar o projeto de interoperabilidade Swift-Java, que permite usar o Swift em programas do Java ou vice-versa. Mostraremos como usar as ferramentas e bibliotecas oferecidas pelo Swift-Java para escrever código seguro, eficiente e totalmente integrado entre as duas linguagens.
Capítulos
- 0:00 - Introdução
- 2:41 - Diferenças nos tempos de execução
- 3:31 - Métodos nativos do Java
- 6:29 - Swift-Java
- 10:13 - Chamar o Java no Swift
- 14:01 - Chamar o Swift no Java
- 20:47 - Conclusão
Recursos
Vídeos relacionados
WWDC25
- Combine C, C++ e Swift com segurança
- Melhore o uso da memória e o desempenho com o Swift
- Novidades do Swift
WWDC23
-
Buscar neste vídeo...
-
-
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 - Introdução
Conheça uma biblioteca experimental da linguagem Swift, chamada swift-java, que permite que o Swift funcione perfeitamente com o Java, aproveitando os recursos já existentes de interoperabilidade com Objective-C, C e C++. Essa interoperabilidade permite introduzir o Swift de forma incremental em bases de código Java atuais, reutilizar bibliotecas entre linguagens e integrar bibliotecas Swift em projetos Java. A interoperabilidade oferecida pelo swift-java permite tanto chamar código Java no Swift, e vice-versa. A equipe está trabalhando em ferramentas e técnicas para lidar com as diferenças entre os tempos de execução entre Java e Swift, além de oferecer maior segurança de memória para código Java traduzido em tipos do Swift.
- 2:41 - Diferenças nos tempos de execução
As linguagens Swift e Java têm recursos em comum, como classes, herança, gerenciamento automático de memória, genéricos e tratamento de erros, embora existam diferenças nos tempos de execução. Apesar dessas diferenças, as semelhanças entre as duas linguagens permitem expressar a maioria das APIs de uma linguagem na outra.
- 3:31 - Métodos nativos do Java
A API Java Native Interface (JNI) foi lançada no início de 1997 e permite que o código Java em execução dentro de uma Java Virtual Machine (JVM) interopere com código nativo, como Swift. Isso geralmente é feito para melhorar o desempenho ou utilizar bibliotecas nativas que não têm equivalente em Java. Para usar a JNI, uma função native é definida em Java e é gerado um arquivo de cabeçalho em C correspondente. Esse arquivo contém uma declaração de função em C que deve ser implementada na linguagem nativa, como Swift. O processo envolve o gerenciamento do ciclo de vida de objetos, a correspondência de assinaturas de métodos e o tratamento de código repetitivo e longo, o que pode ser suscetível a erro e, demorado, além de levar a falhas fatais.
- 6:29 - Swift-Java
O SwiftJava melhora a interoperabilidade entre as linguagens Swift e Java. Ele oferece um pacote de ferramentas, incluindo bibliotecas Swift e Java, uma ferramenta de linha de comando e integrações com sistemas de compilação, para simplificar e tornar mais segura a interação entre as duas linguagens. A ferramenta de linha de comando swift-java automatiza a geração do código de ligação, eliminando a necessidade de lidar manualmente com arquivos de cabeçalho em C. Isso resulta em um código mais limpo, fácil de manter, com melhor gerenciamento do ciclo de vida dos objetos e maior segurança de tipos. Agora você pode se concentrar na lógica de negócios, aproveitando ao máximo os ecossistemas do Swift e do Java e evitando os erros e armadilhas comuns da implementação manual da JNI.
- 10:13 - Chamar o Java no Swift
O SwiftJava permite integrar bibliotecas Java a projetos do Swift. Para importar uma biblioteca Java inteira, como a Apache Commons CSV, prepare as seguintes coordenadas de artefato: groupId, artifactId e version. Em seguida, o SwiftJava utiliza o Gradle, um sistema de compilação de código aberto, para resolver dependências Java. Existem duas formas de baixar e encapsular essas dependências: Usando o plug-in da ferramenta de compilação SwiftJava, que requer a desativação do Sandbox de segurança do SwiftPM, ou o comando resolve da ferramenta de linha de comando swift-java, que executa a resolução fora do processo de compilação. Após resolver as dependências do Java, você pode importar a biblioteca Java no Swift, iniciar a JVM dentro do processo do Swift e usar o código em Java e suas coleções de forma integrada com os recursos do Swift, com o JavaKit gerenciando o ciclo de vida dos objetos.
- 14:01 - Chamar o Swift no Java
O SwiftJava permite integrar bibliotecas Swift a projetos do Java. Para isso, esta sessão da WWDC25 apresenta uma nova abordagem que elimina a necessidade de funções de wrapper extensas no lado Java. Em vez disso, toda a biblioteca Swift é encapsulada com classes Java utilizando a nova API Foreign Function and Memory (FFI), introduzida no Java 22. A FFI oferece controle aprimorado sobre a memória nativa e permite uma integração profunda entre os tempos de execução e sistemas de gerenciamento de memória do Java e do Swift. Ao usar a FFI, o processo de chamar o código do Swift a partir do Java fica mais eficiente e seguro. A ferramenta de linha de comando swift-java é usada para gerar as classes Java necessárias e o código auxiliar em Swift. Ela automatiza a geração de código padrão, simplificando o processo. As classes Java geradas funcionam como assessores para os tipos e funções Swift, expondo efetivamente a funcionalidade da biblioteca Swift para o Java. O gerenciamento adequado de memória é fundamental ao trabalhar com objetos Swift nativos em Java. A discussão destaca duas abordagens: O uso do AutoArena, que depende do Coletor de Lixo (GC) do Java, e o método preferido, que utiliza o bloco try-with-resources com o ConfinedArena. Essa última abordagem garante uma desalocação de objetos bem definida e ordenada, evitando problemas de desempenho e sobrecarga no GC. Essa técnica permite criar e publicar bibliotecas Java encapsuladas em Swift, facilitando sua utilização em projetos do Java. Isso simplifica a adoção do Swift por equipes que já possuem uma base sólida em Java, promovendo um ambiente de desenvolvimento mais flexível e eficiente. O desenvolvimento contínuo do SwiftJava busca aprimorar ainda mais essas técnicas, oferecendo uma solução robusta para a interoperabilidade entre as duas linguagens.
- 20:47 - Conclusão
A linguagem de programação Swift é de código aberto e hospedada no GitHub e em bibliotecas como o SwiftJava. A comunidade é ativa nos fóruns do Swift, onde você pode aprender, compartilhar ideias e dar feedback.