这里有人可以详细解释 Kotlin/Native spinner app 项目结构吗?还有关于不同模块如何工作的细节

Can anyone here explain the Kotlin/Native spinner app project structure in detail? Also the specifics on how different modules work

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

谢谢。

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

在公共模块中我们可以expect打印函数:

expect fun print(a: String)

但我们不知道它是如何实现的,因为通用模块对Java的System.out以及Java脚本的[=一无所知19=].
但是普通模块可以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)

(可能)对于本地人:

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

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

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

关于旋转器应用程序

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

readResourcesrandomInit 应该标记为 actual,并且应该有一个 "common module" 具有 "expect"ed 这两个函数。
他们没有这样做可能是因为 KotlinConf 举行时 Kotlin 1.2(它带来了稳定的多平台支持)还没有出来。