我想具体了解各个客户端模块如何使用常用模块。哪些是所有客户端和服务器共享的真正常见部分。
谢谢。
答案 0 :(得分:1)
这很容易。我怀疑你在谈论Kotlin多平台模块
考虑print
和println
。
在公共模块中,我们可以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
项目
readResources
和randomInit
应标记为actual
,并且应该有一个“共同模块”,“期望”这两个功能。
他们没有这样做可能是因为当KotlinConf持有时,Kotlin 1.2(它带来了稳定的多平台支持)并没有出来。