问题标签 [kotlin-multiplatform]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3021 浏览

serialization - SerializationException:找不到无参数序列化程序

我正在创建一个 Kotlin 多平台库;实际上我有 3 个模块(commonjvmjs),

在我得到的类路径中:classpath "org.jetbrains.kotlin:kotlin-serialization:${versions.kotlin}"

在我的模块中,我得到了:

  • 常见的:"org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:${versions.kotlinSerialization}"
  • JDK:"org.jetbrains.kotlinx:kotlinx-serialization-runtime:${versions.kotlinSerialization}"
  • js:"org.jetbrains.kotlinx:kotlinx-serialization-runtime-js:${versions.kotlinSerialization}"

apply plugin: 'kotlinx-serialization'ofc。

​​​

但是当我运行这个简单的测试时:

.

我收到了这个错误:

我有相同的结果注释属性“a”(@SerialName),无论如何都不应该需要注释。

我错过了什么吗?:/ 谢谢

0 投票
1 回答
414 浏览

android - 从 Swift 访问 Kotlin 标准库

在我的 Kotlin Multiplatform 项目中,我试图访问kotlin-stdlib从 Swift 中定义的 Kotlin 类型。

TL;DR:StdLib 类型/方法似乎不会导致标题定义,我想要一个不涉及编写大量样板代码的解决方案

我的场景

我在 Kotlin 中定义了一个接口......

...并在 Swift 中实现了这个接口 ...

...我正在尝试创建一个Sequence,但kotlin.sequences包中没有可用的方法(例如generateSequence)。

是否真的可以访问超出我在代码中定义的 Kotlin 框架类型或方法——如果可以,如何访问?此外,如何在不编写样板代码的情况下实现这一点?

更多详细信息

查看生成的 Objective-C 头文件,我看到了我的类(显然)和基本 Kotlin 类型的定义。缺少的基本上是标准库功能中的所有内容(我关心所有Sequence相关的内容)。

我的build.gradle.kts样子:

kotlin-stdlib定义定义为 iOS 目标的依赖项后,我希望这些可以从 Swift 中实际可用。

最小的工作示例

https://github.com/panzerfahrer/so-mwe-kotlin-mpp-swift

当前的解决方案

我想出的唯一解决方案是为 iOS 目标编写所需的函数:

这工作正常,但非常不令人满意,因为它需要大量样板代码。此外,无法以这种方式提供扩展功能,并且需要更多样板代码甚至重写标准库的部分内容。

所需的解决方案

我喜欢尽可能避免编写样板代码。我实际上只关心的是(在我的情况下)Sequence可以从 Swift 完全访问。我的感觉是,让编译器为标准库功能生成选定的或所有的头文件定义就足够了。

0 投票
1 回答
451 浏览

kotlin - 错误:使用@OptionalExpectation 注释的声明只能在通用模块源中使用

更新 (2018-11-03)

这是一个已知问题,正在此处跟踪。

原帖

我正在玩 Kotlin MPP,特别是 Kotlin 1.3 和新结构。将 Kotlin 1.2 MPP 转换为新结构后,我不断收到以下错误:

这些是指@JsName()我在公共模块中的注释。

我努力了:

  • 使用内置向导从头开始一个全新的 MPP,并简单地添加@JsName("test")hello()生成的示例附带的函数中。即使这样似乎也会引起问题。
  • 使缓存无效/重新启动 IntelliJ
  • 使用最新版本的一切(Kotlin 1.3、IntelliJ IDEA 2018.2.5 Ultimate)
  • ./gradlew build从命令行调用。这行得通。

示例项目在这里

链接 Kotlin 问题

0 投票
1 回答
541 浏览

kotlin - Is there a Kotlin-Multiplatform feature or pattern that can help to implement a common abstraction for, say, the Closeable interface?

The Closeable interface in Java provides a convenient abstraction that facilitates the management of resources that can be closed. In the context of multi-platform kotlin, is there a pattern, practice or feature that can help breach the gap between a shared/multi-platform Closeable interface and the actual Java Closeable interface knowing that these are necessarily two different types?

The effects of not being able to close the type difference and/or having a standard-lib closeable are the proliferation of Closeable interfaces that can't be combined across libraries even though they are fundamentally the same thing.

0 投票
0 回答
612 浏览

generics - 将 JSON 数组转换为列表的更好方法给定一个 KClass通过 Gson

我正在构建一个多平台 JSON 库作为原型,以了解如何构建事物。

目前我有这个扩展函数可以从 JSON 数组转换为对象列表。

为 Jackson 实现这个接口相当简单:

现在我正在尝试对 Gson 做同样的事情:

查看 Java 中的其他答案,这似乎是要遵循的模式:

我的 Kotlin 等效失败:

和:

java.lang.ClassCastException:java.util.ArrayList 无法转换为 [Ljava.lang.Object;

这个:

和这个:

失败:

java.lang.ClassCastException:com.google.gson.internal.LinkedTreeMap 无法转换为 io.jvaas.integration.gson.SampleClass

SampleClass的类型在哪里T

如果我删除类型并打印结果

我看到了正确的数据:

[{blah1=文本,blah2=123.0,blah3=567.0},{blah1=文本,blah2=123.0,blah3=567.0}]

类 java.util.ArrayList

类 java.util.ArrayList

打印出该 ArrayList 的第一项,但是我看到它不是 SampleClass 类型,而是 LinkedTreeMap

com.google.gson.internal.LinkedTreeMap 类

将该列表中的每个项目转换为字符串,然后将每个单独的 JSON 块转换为对象似乎可行,但看起来很 hacky

有没有更好的方法来做到这一点?还是 Gson 总是将更复杂的 JSON 数据转换为 TreeMaps 和 LinkedTreeMaps?

0 投票
2 回答
5898 浏览

android - 多平台项目的 ios 模块中未解决 ktor 依赖项

我有一个针对 iOS 和 Android 的 kotlin-multiplatform 项目。Ktor http 客户端用于通用模块。

一切都适用于 Android 应用程序。但是在使用 iOS lib 构建项目时,我收到以下异常:

...和其他的,说没有一个 ktor 依赖项得到解决。

这是 build.gradle:

以下是来自 common 模块的文件代码,它会产生错误:

0 投票
3 回答
1148 浏览

ios - 适用于 iOS 的 Kotlin 多平台库,带有位码

我们使用 Kotlin 在 Android 和 iOS 之间共享一个库。

我们设置了一切,但在 iOS 上我需要启用 Bitcode。经过研究,我找到了解决方案:

但现在的问题是,我有吗?如果有,我如何区分发布和调试二进制文件以及特定标志?我可以简单地添加两个标志而没有任何缺点吗?

也许有人可以启发我谢谢

0 投票
1 回答
609 浏览

kotlin - Ktor:无法解析 JacksonSerializer

我正在尝试在 Kotlin Multiplatform 项目的 commonMain 模块中设置 ktor http 客户端(如此处所述https://ktor.io/clients/http-client/features/json-feature.html),但无法解析对它的依赖:

摇篮版本:4.7。

这是通用模块的 build.gradle:

0 投票
2 回答
1153 浏览

kotlin - Kotlin 多平台项目上的 Js 模块构建失败

构建失败并显示错误消息:

./output.js 模块中的错误未找到:错误:无法解析“C:\Users\User\Documents\MultiPlatformTodo\web\web”中的“common”@ ./output.js 340:91-108

./output.js 中的错误未找到模块:错误:无法解析“C:\Users\User\Documents\MultiPlatformTodo\web\web”中的“kotlin”@ ./output.js 340:18-35

./output.js 模块中的错误未找到:错误:无法解析“C:\Users\User\Documents\MultiPlatformTodo\web\web”中的“kotlin-react”@ ./output.js 340:37-60

./output.js 中的错误模块未找到:错误:无法解析“C:\Users\User\Documents\MultiPlatformTodo\web\web”中的“kotlin-react-dom”@ ./output.js 340:62 -89

./output.js 中的错误未找到模块:错误:无法解析“C:\Users\User\Documents\MultiPlatformTodo\web\web”中的“kotlinx-coroutines-core”@ ./output.js 340:110 -144

./output.js 中的错误模块未找到:错误:无法解析“C:\Users\User\Documents\MultiPlatformTodo\web\web”中的“kotlinx-html-js”@ ./output.js 340:146 -172

FAILURE:构建失败并出现异常。

  • 出了什么问题:任务':web:webpack-bundle'执行失败。节点 webpack.js 失败(退出代码 = 2)

js模块build.gradle定义如下:

settings.gradle

这是common模块的内容:

0 投票
1 回答
213 浏览

kotlin-multiplatform - 在 Kotlin 1.3 多平台 gradle 项目中参考来自 kotlin-jvm 的 kotlin-js 资源

在 Kotlin 1.2.61 中,可以有从 kotlin-jvm 模块到 kotlin-js 模块的 Gradle 依赖项。

这对于将生成的 js 文件包含在独立的 jar 中以将它们用作静态资源很有用。

但是,从 Kotlin 1.2.70 开始,有一个限制阻止将依赖项从 kotlin-jvm 模块添加到 kotlin-js 模块,请参阅:问题

确保在 kotlin-jvm 模块之前构建 kotlin-js 模块的支持方法是什么,以便可以将 kotlin-js dist 文件包含在 kotlin-jvm 模块中(大概不添加它们之间的依赖关系) ?