2025 Swift
Explore Swift and Java interoperability
Learn how you can mix Swift and Java in a single codebase. We’ll introduce the swift-java interoperability project, which allows you to use Swift in Java programs or vice versa. We’ll show you how to use the tools and libraries offered by swift-java to write safe and performant code that interoperates between these two runtimes.
Watch at developer.apple.com ↗Chapters
Code shown on screen · 5 snippets
Implement JNI native methods in Swift
import JavaKit
import JavaRuntime
import Crypto
("com.example.JNIExample")
extension JNIExample: JNIExampleNativeMethods {
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()
}
} Resolve Java dependencies with swift-java
swift-java resolve --module-name JavaApacheCommonsCSV 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.") 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 ... Create Swift objects from Java
try (var arena = SwiftArena.ofConfined()) {
var business = new SwiftyBusiness(..., arena);
} Resources
Related sessions
-
32 min -
38 min -
32 min -
18 min