Kotlin导出Objective-C时类与协议的命名规则及查询渠道
Kotlin代码导出至Objective-C时的类/协议命名逻辑及查询途径
一、命名转换逻辑
Kotlin代码导出到Objective-C时,类和协议的名称是包名简化+模块名+原类型名的组合,用下划线分隔,核心规则如下:
- 包名处理:将原Kotlin包名的层级转换为大写开头、下划线分隔的格式,比如
kotlinx.serialization会变成Kotlinx_serialization - 加入模块名:拼接当前Kotlin/Native模块的名称(比如示例里的
core,对应kotlinx.serialization的核心模块) - 拼接原类型名:保留原Kotlin类/接口的首字母大写名称,直接追加到后面
- 整体用下划线连接,确保符合Objective-C的标识符命名规范(不允许点号,只能用字母、数字、下划线)
示例验证
原Kotlin代码:
package kotlinx.serialization.modules public interface SerializersModuleCollector {...}
转换后的Objective-C协议名是Kotlinx_serialization_coreSerializersModuleCollector,拆解后:
- 包名简化:
kotlinx.serialization→Kotlinx_serialization - 模块名:
core - 原类型名:
SerializersModuleCollector - 组合后:
Kotlinx_serialization_coreSerializersModuleCollector
其他相关类型如KSerializer、SerializationStrategy也遵循同样规则,分别转换为Kotlinx_serialization_coreKSerializer、Kotlinx_serialization_coreSerializationStrategy。
完整转换后的Objective-C协议示例:
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)?) }
二、详细信息查询途径
- 查看Kotlin官方文档中Kotlin/Native 与 Objective-C 交互的专门章节,里面明确了命名映射、类型转换等全套规则
- 针对kotlinx.serialization这类跨平台库,可以查看其官方文档中关于Objective-C导出的说明部分
- 也可以直接查阅Kotlin/Native源码中负责Objective-C导出的模块,了解命名转换的具体实现逻辑
内容的提问来源于stack exchange,提问作者GuilhE
相关产品推荐
相关产品推荐

