任何人都可以在这里详细解释Kotlin / Native微调器应用项目结构吗?还有关于不同模块如何工作的细节

时间:2017-12-13 12:44:18

标签: kotlin kotlin-interop kotlin-native

我想具体了解各个客户端模块如何使用常用模块。哪些是所有客户端和服务器共享的真正常见部分。

谢谢。

1 个答案:

答案 0 :(得分:1)

这很容易。我怀疑你在谈论Kotlin多平台模块 考虑printprintln

在公共模块中,我们可以expect打印功能:

expect fun print(a: String)

但是我们不知道它是如何实现的,因为公共模块对Java的System.out以及JavaScript的console一无所知。 但是公共模块可以expect这样在屏幕上打印String的功能,而不提供实现。

由于我们有print,我们可以实施println

fun println(a: String) = print("$a\n")

以上所有代码都在公共模块内 您所要做的就是为JVM / JS实现print

对于JVM:

actual fun print(a: String) = System.out.println(a)

对于JS:

actual fun print(a: String) = console.log(a)

(也许)For Native:

actual fun print(a: String) = printf(a)

上面的三个代码块都在客户端模块中。

考虑到你设计了一种数据格式,你有编码和解码代码。这些代码用于您的Android设备(JVM),后端服务器(JVM),前端网页(JS),本机应用程序(Native)。 您在所有子项目中使用Kotlin但您只想编写一次编码器/解码器。 Kotlin多平台模块解决了这个问题。

关于微调器

它没有使用标准的kotlin方法来创建多平台项目。这是一个谜语。
有一个readResources(和randomInit,对于osx / linux)函数在平台上实现不同但签名相同,gradle将决定应该使用客户端编译哪个Kommon.kt项目

readResourcesrandomInit应标记为actual,并且应该有一个“共同模块”,“期望”这两个功能。
他们没有这样做可能是因为当KotlinConf持有时,Kotlin 1.2(它带来了稳定的多平台支持)并没有出来。