【发布时间】:2020-12-01 14:15:59
【问题描述】:
我正在使用带有 native-mt 协程支持和 Ktor 库的 Kotlin-Native。我有几个暂停的函数,它们接收使用构建器模式构建的对象。我知道我需要在 main/ui 线程上调用挂起的函数。但是,我不能保证会在该线程上创建构建器对象。我的理解是,在将它们发送到主线程以使用挂起函数调用之前,它们需要被冻结。对吗?
例如,这会因为查询对象没有被冻结而失败:
func loadData() {
DispatchQueue.global(qos: .background).async {
let query = CustomerQuery().emails(value: ["customer@gmail.com"])
self.fetchCustomersAndDoSomething(query: query)
}
}
func fetchCustomersAndDoSomething(query: CustomerQuery) {
DispatchQueue.main.async {
self.mylibrary.getCustomers(query: query) { response, err in
// do something with response
}
}
}
如果这是真的,我是否正确,我需要为每个这样的对象添加一个方法才能“冻结”它,因为来自 Freezing.kt 的 freeze() Kotlin 函数似乎无法从导入我的库的 Swift 代码?冻结仅适用于 iOS 代码这一事实使情况更加复杂,因为 Android 代码不需要它。
有没有更简单的方法将 Swift 创建的 Kotlin 对象传递给挂起的函数,而不需要在主线程上创建这些对象?
【问题讨论】:
标签: swift kotlin kotlin-coroutines kotlin-multiplatform