InvalidMutabilityException:冻结 kotlin.native.internal 异常的突变尝试

InvalidMutabilityException: mutation attempt of frozen kotlin.native.internal Exception

我是 Kotlin Multiplatform 和 Swift 语言的新手,我对 KMM 只有 iOS 部分有问题,我在 [=27] 上成功 运行 =] 但由于并发问题,它在 IOS 上失败。

Kotlin 代码片段:

@Throws(Exception::class)
    suspend fun getResponse(data: String): String {
        var response: String
        
        client.responsePipeline.intercept(HttpResponsePipeline.Transform) { (_, body) ->
                    when (context.response.status) {
                        HttpStatusCode.OK -> response = body as String
                    }
                }
                response = client.post(BASE_URL) {
                    contentType(ContentType.Application.Json)
                    body = data
        }
        return response
    }

iOS 代码片段:

@State var response: String = ""

    Button("Click") {
        Repository().getResponse(data: "hello world") { data, error in
            if data != nil {
                response.self = "\(data)"
            }
        }
    }

我从我想要的 Api 得到了 HttpClient: {"output":"...","statusCode":200 } 但它还是失败了。

我尝试用 CoroutineScope(Dispatchers.Main) 包装 post 请求{ withContext(Dispatchers.Default){}}

但是没有运气,知道为什么吗?

假设您使用的是最新的 Kotlin 和库版本,您应该启用新的内存模型。把这个放在 gradle.properties

kotlin.native.binary.memoryModel=experimental

有关示例,请参阅 KaMP Kit

迁移到 Ktor 2.0.0 为我解决了很多问题。