iOS上的KMM:没有事件循环。使用runBlocking{…}启动一个
我正在尝试coroutines在Kotlin Multiplatform项目中使用。我也没有经验。
我正在尝试调用此函数
fun startFlow {
coroutineScope.launch {
withContext(defaultDispatcher) {
myFlow.collect { next -> onNext(next) }
}
}
}
coroutineScope上iOS是这样的
val defaultScope: CoroutineScope = object : CoroutineScope {
override val coroutineContext: CoroutineContext
get() = SupervisorJob() + Dispatchers.Default
}
这不是给我这个问题的唯一调用,实际上所有调用coroutines似乎都因此错误而失败:
kotlin.IllegalStateException: There is no event loop. Use runBlocking { ... } to start one.
这就是我导入库的方式
val commonMain by getting {
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.3")
}
}
我正在使用Kotlin1.4.31。此问题仅存在于 中iOS,Android可以完美运行。
我不明白我是否遗漏了什么。
回答
对于 iOS,您需要使用后缀为“native-mt”的协程,更多信息请看这里
所以用
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.3-native-mt")