为什么在使用 Kotlin Multiplatform 生成的 iOS 框架中属性名称有一个下划线下划线?

问题描述

我有一个 Kotlin 多平台项目,我正在从 Kotlin 源代码生成一个 iOS 框架。

我的一个 Kotlin 接口具有如下定义的属性

interface Presenter {
    val validValues: List<Int>
    ...
}

但是,在生成的 iOS 框架的 .h 文件中,这是在末尾带有下划线“_”(下划线):

@property (readonly) NSArray<XYZInt *> *validValues_ __attribute__((swift_name("validValues_")));

为什么要在属性名称末尾添加下划线“_”(下划线)?

解决方法

原来在我的源代码中,我有另一个接口用作数据源,它定义了相同的属性名称:

interface MyModelSpecificDataSource {
    val validValues: List<Int>
    ...
}

一旦我将定义更改为不同的名称,下划线“_”就不再添加到末尾。

基于此,鉴于任何类都可以实现任何接口,我的假设是这样做是为了将一个定义与另一个定义区分开来,以免它们发生冲突。 Kotlin 团队的好消息!