任何人都可以在这里详细解释Kotlin / Native微调应用程序项目结构? 还有关于不同模块如何工作的细节
我想具体了解各个客户端模块如何使用通用模块。 哪些是所有客户端和服务器共享的真正常见部分。
谢谢。
这很容易。 我怀疑你在谈论Kotlin多平台模块。
考虑print
和print
。
在通用模块中,我们可以expect
打印function:
expect fun print(a: String)
但是我们不知道它是如何实现的,因为通用模块对Java的System.out
以及JavaScript的console
一无所知。
但是通用模块可以expect
在屏幕上打印String
function,而不提供实现。
由于我们已经print
,我们可以实现println
:
fun println(a: String) = print("$a\n")
以上所有代码均位于通用模块内部。
而你所要做的只是为了实现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的技巧。
有一个readResources
(以及osx / linux的randomInit
)函数,在平台上执行不同的签名,Gradle将决定哪个Kommon.kt
应该与客户端项目一起编译。
readResources
和randomInit
应该被标记为actual
,并且应该有一个“通用模块”来“期待”这两个函数。
他们并没有这样做,可能是因为Kotlin 1.2(带来稳定的多平台支持)在KotlinConf成立时并没有出现。