expect/actual Mechanism for Platform APIs
Declare expected declarations in common code and provide actual implementations per platform.
The expect/actual Pattern
expect declares an API contract in commonMain. Each platform provides an actual implementation. The compiler enforces that all targets have an actual.
// commonMain:
expect fun platformName(): String
// androidMain:
actual fun platformName(): String = "Android ${android.os.Build.VERSION.SDK_INT}"
// iosMain:
actual fun platformName(): String = UIDevice.currentDevice.systemName()expect class
expect class declares a class with its API in commonMain. Each platform provides the full implementation.
// commonMain:
expect class DateTime {
fun format(pattern: String): String
val timestamp: Long
}
// androidMain:
actual class DateTime {
actual val timestamp = System.currentTimeMillis()
actual fun format(pattern: String): String =
java.text.SimpleDateFormat(pattern).format(java.util.Date(timestamp))
}All lessons in this course
- KMP Project Structure: commonMain, androidMain, iosMain
- expect/actual Mechanism for Platform APIs
- Sharing Repository and Use Case Layers
- Dependency Injection in KMP with Koin