这里有人可以详细解释 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 多平台模块。
考虑 print
和 println
.
在公共模块中我们可以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
应与客户端项目一起编译。
readResources
和 randomInit
应该标记为 actual
,并且应该有一个 "common module" 具有 "expect"ed 这两个函数。
他们没有这样做可能是因为 KotlinConf 举行时 Kotlin 1.2(它带来了稳定的多平台支持)还没有出来。
我想具体了解 common 模块是如何被各个 client 模块使用的。哪些是所有客户端和服务器共享的真正公共部分。
谢谢。
这很简单。我怀疑你在谈论 Kotlin 多平台模块。
考虑 print
和 println
.
在公共模块中我们可以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
应与客户端项目一起编译。
readResources
和 randomInit
应该标记为 actual
,并且应该有一个 "common module" 具有 "expect"ed 这两个函数。
他们没有这样做可能是因为 KotlinConf 举行时 Kotlin 1.2(它带来了稳定的多平台支持)还没有出来。