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)?)
}
我已经使用以下结构进行了测试(
shared
实现了shared-ui-models
):
还有这个
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 部分来自哪里。