Как использовать kotlin.system с Kotlin Native? - PullRequest
1 голос
/ 01 апреля 2019

Я бы хотел использовать системные функции, такие как getTimeMillis (), которые должны быть частью kotlin.system: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.system/index.html

Но компилятор говорит, что такой модуль не может быть импортирован. Конфигурация gradle выглядит следующим образом (мультиплатформенный проект kotlin):

    commonMain.dependencies {
        implementation "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.10"
        implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.10.0"
        implementation "io.ktor:ktor-client:1.0.0"
        implementation "io.ktor:ktor-client-logging:1.1.0"
        implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.1.0"
    }

Также я не могу найти ни одного примера использования или этого модуля.

1 Ответ

1 голос
/ 07 апреля 2019

getTimeMillis() доступно только для JVM и Native, но не для Common и JS.

Если вы, кроме вызова getTimeMillis() в исходном каталоге модуля Native, компилятор может найти функцию.

Если вам нужно, чтобы вызов находился в Common, вам нужно самостоятельно реализовать функцию-обертку Common и реализовать обертку на каждой платформе самостоятельно.

Для этого создайте функцию-заглушку и функцию, которая использует ее в вашем общем модуле. Например:

expect fun getSystemTimeInMillis(): Long

fun printSystemTimeMillis() {
    println("System time in millis: ${getSystemTimeInMillis()}")
}

Затем реализуйте эту функцию для модулей вашей платформы. Например, в модуле JVM, например:

actual fun getSystemTimeInMillis() = System.currentTimeMillis()

Или в родном модуле, например:

actual fun getSystemTimeInMillis() = getTimeMillis()

Смотри также: https://github.com/eggeral/kotlin-native-system-package

...