问题标签 [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.
serialization - SerializationException:找不到无参数序列化程序
我正在创建一个 Kotlin 多平台库;实际上我有 3 个模块(common,jvm和js),
在我得到的类路径中: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
),无论如何都不应该需要注释。
我错过了什么吗?:/ 谢谢
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 完全访问。我的感觉是,让编译器为标准库功能生成选定的或所有的头文件定义就足够了。
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 - 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.
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?
android - 多平台项目的 ios 模块中未解决 ktor 依赖项
我有一个针对 iOS 和 Android 的 kotlin-multiplatform 项目。Ktor http 客户端用于通用模块。
一切都适用于 Android 应用程序。但是在使用 iOS lib 构建项目时,我收到以下异常:
...和其他的,说没有一个 ktor 依赖项得到解决。
这是 build.gradle:
以下是来自 common 模块的文件代码,它会产生错误:
ios - 适用于 iOS 的 Kotlin 多平台库,带有位码
我们使用 Kotlin 在 Android 和 iOS 之间共享一个库。
我们设置了一切,但在 iOS 上我需要启用 Bitcode。经过研究,我找到了解决方案:
但现在的问题是,我有吗?如果有,我如何区分发布和调试二进制文件以及特定标志?我可以简单地添加两个标志而没有任何缺点吗?
也许有人可以启发我谢谢
kotlin - Ktor:无法解析 JacksonSerializer
我正在尝试在 Kotlin Multiplatform 项目的 commonMain 模块中设置 ktor http 客户端(如此处所述https://ktor.io/clients/http-client/features/json-feature.html),但无法解析对它的依赖:
摇篮版本:4.7。
这是通用模块的 build.gradle:
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
模块的内容:
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 模块中(大概不添加它们之间的依赖关系) ?