2

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

谢谢你。

4

1 回答 1

2

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

在 common 模块中我们可以expect打印一个函数:

expect fun print(a: String)

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

既然我们有print,我们可以实现println

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

上面的所有代码都在 common 模块内。
而你所要做的就是print为 JVM/JS 单独实现。

对于 JVM:

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

对于 JS:

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

(也许)对于本地人:

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

上面的三个代码块位于客户端模块内。

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

关于微调器应用程序

它没有使用标准的 kotlin 方法来创建多平台项目。这是gradle的一个技巧。
有一个readResourcesrandomInit对于 osx/linux 也是如此)函数在平台上实现不同但具有相同的签名,并且 gradle 将决定哪些Kommon.kt应该与客户端项目一起编译。

readResources并且randomInit应该被标记为actual,并且应该有一个“公共模块”已经“预期”了这两个功能。
他们没有这样做可能是因为 KotlinConf 举行时 Kotlin 1.2(带来稳定的多平台支持)还没有推出。

于 2017-12-13T13:15:33.463 回答