Kotlin 多平台 Objective-C 导出文件名约定

问题描述 投票:0回答:1

Kotlin 代码导出到 Objective-C 时,使用什么逻辑来创建

class
protocol
名称?此外,我在哪里可以找到有关此过程的详细信息?

代码如下:

package kotlinx.serialization.modules
   
public interface SerializersModuleCollector {...}

来自:core/commonMain/src/kotlinx/serialization/modules/SerializersModuleCollector.kt

转化为:

Kotlinx_serialization_coreSerializersModuleCollector
Kotlinx_serialization_coreKSerializer
Kotlinx_serialization_coreSerializationStrategy
...

完整示例:

public protocol Kotlinx_serialization_coreSerializersModuleCollector {

  func contextual(kClass: any KotlinKClass, provider: @escaping ([any Kotlinx_serialization_coreKSerializer]) -> any Kotlinx_serialization_coreKSerializer)

  func contextual(kClass: any KotlinKClass, serializer: any Kotlinx_serialization_coreKSerializer)

  func polymorphic(baseClass: any KotlinKClass, actualClass: any KotlinKClass, actualSerializer: any Kotlinx_serialization_coreKSerializer)

  @available(*, deprecated, message: "Deprecated in favor of function with more precise name: polymorphicDefaultDeserializer")
  func polymorphicDefault(baseClass: any KotlinKClass, defaultDeserializerProvider: @escaping (String?) -> (any Kotlinx_serialization_coreDeserializationStrategy)?)

  func polymorphicDefaultDeserializer(baseClass: any KotlinKClass, defaultDeserializerProvider: @escaping (String?) -> (any Kotlinx_serialization_coreDeserializationStrategy)?)

  func polymorphicDefaultSerializer(baseClass: any KotlinKClass, defaultSerializerProvider: @escaping (Any) -> (any Kotlinx_serialization_coreSerializationStrategy)?)
}
objective-c kotlin kotlin-multiplatform cinterop
1个回答
0
投票

我已经使用以下结构进行了测试(

shared
实现了
shared-ui-models
):

enter image description here
enter image description hereenter image description here

还有这个

Model.kt
文件:

package com.sample.models

import kotlin.experimental.ExperimentalObjCName
import kotlin.native.ObjCName

@OptIn(ExperimentalObjCName::class)
@ObjCName(swiftName = "MyTestScreen")
data class Screen(val name: String)

输出为:

__attribute__((swift_name("Shared_ui_modelsMyTestScreen")))

或者如果我删除

Shared_ui_modelsScreen
,则只是
@ObjCName

我倾向于假设逻辑是:
模块名称大写+“-”替换为“_”+

class
/
protocol
名称。

我想对此进行一些确认,因为当将此逻辑应用于OP中的

SerializersModuleCollector.kt
文件时,我们看到它的模块只是core。然而,结果是 Kotlinx_serialization_coreSerializersModuleCollector,这让我想知道 Kotlinx_serialization 部分来自哪里。

© www.soinside.com 2019 - 2024. All rights reserved.