gpt4 book ai didi

intellij-idea - Kotlin 多平台 : sharing actual class implementation for multiple targets (iOS, macOS)

转载 作者:行者123 更新时间:2023-12-01 06:18:11 25 4
gpt4 key购买 nike

我正在开发一个支持 JVM、iOS 和 macOS 的 Kotlin/Native 多平台项目。我的设置有以下模块:

- common
- ios
- jvm
- macos

我想使用一些 native 代码作为 actual 类,并将 expected 类放在 common 中。但是,对于多个目标(iOS 和 macOS),实际的类实现是相同的。有没有一种方法可以设置我的源(可能在 Gradle 中),这样我就不必维护 2 个相同的实际类(class)副本?

最佳答案

Stately 有一个相当复杂的配置。 iOS 和 Macos 共享所有相同的代码。

为了构建项目,有 commonMainnativeCommonMain 依赖于它,实际上 appleMain 依赖于 nativeCommonMain.

commonMain {
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-stdlib-common'
}
}

jvmMain {
dependsOn commonMain
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
}
}

nativeCommonMain {
dependsOn commonMain
}

appleMain {
dependsOn nativeCommonMain
}

configure([iosX64Main, iosArm64Main, macosMain, iosArm32Main]) {
dependsOn appleMain
}

这种结构可能比您需要的更深,但我们需要一些不同的 linux 和 windows 结构。我认为 Egor 上面的回答更容易理解。

我们实际上在 Stately 中定义了多平台原子,因此您可以将它们用作灵感,或者实际上只是使用库本身。

https://github.com/touchlab/Stately

常见

expect class AtomicInt(initialValue: Int) {
fun get(): Int
fun set(newValue: Int)
fun incrementAndGet(): Int
fun decrementAndGet(): Int

fun addAndGet(delta: Int): Int
fun compareAndSet(expected: Int, new: Int): Boolean
}

JVM

actual typealias AtomicInt = AtomicInteger

原生

actual class AtomicInt actual constructor(initialValue:Int){
private val atom = AtomicInt(initialValue)

actual fun get(): Int = atom.value

actual fun set(newValue: Int) {
atom.value = newValue
}

actual fun incrementAndGet(): Int = atom.addAndGet(1)

actual fun decrementAndGet(): Int = atom.addAndGet(-1)

actual fun addAndGet(delta: Int): Int = atom.addAndGet(delta)

actual fun compareAndSet(expected: Int, new: Int): Boolean = atom.compareAndSet(expected, new)

}

关于intellij-idea - Kotlin 多平台 : sharing actual class implementation for multiple targets (iOS, macOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56760825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com