gpt4 book ai didi

android - Kotlin 多平台移动 : Flow> gets mapped to Flow in iOS

转载 作者:行者123 更新时间:2023-12-05 00:11:57 27 4
gpt4 key购买 nike

我的共享模块包含 Repository 类,它有两个函数,返回一个包含在扩展 Flow 的自定义类中的项目列表。称为CFlow。

我取了 CFlow 的代码来自 kotlinconf-apphere :

fun <T> Flow<T>.asCFlow(): CFlow<T> = CFlow(this)

class CFlow<T>(private val origin: Flow<T>) : Flow<T> by origin {

fun watch(block: (T) -> Unit): Closeable {
val job = Job()

onEach {
block(it)
}.launchIn(CoroutineScope(Dispatchers.Main + job))

return object : Closeable {
override fun close() {
job.cancel()
}
}
}
}

存储库示例函数:

fun getData1(): CFlow<List<Profile>>

fun getData2(): CFlow<List<String>>

当我尝试在 iOS swift 代码中调用此函数时,函数的返回类型被转换为 CFlow<NSArray>在 watch 函数内部,数组类型是 Any。

这很奇怪,因为在 kotlinconf-app 中和 here函数的返回类型被保留,并且它们的代码库中不涉及转换。

问题:如何让 CFlow 的类型在 Xcode iOS 项目中被识别?

Android Studio 版本:4.1.1

Kotlin 语言和插件版本:1.4.21

Kotlin Multiplatform Mobile 插件版本:0.2.0

Xcode 版本:12.2

screenshot1

screenshot2

最佳答案

现在编译器无法理解嵌套泛型。作为目前的解决方法,将您的列表包装在这样的数据类中

data class ProfileResult(val data: List<Profile>)

fun getData1(): CFlow<ProfileResult>

它会给你一个具体的 ios 类型

关于android - Kotlin 多平台移动 : Flow<List<*SomeModel*>> gets mapped to Flow<NSArray> in iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65281397/

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