У меня есть проект Kotlin Multiplatform, в котором я создаю iOS Framework из исходного кода Kotlin.

Один из моих интерфейсов Kotlin имеет свойство, определенное как таковое:

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

Однако в сгенерированном файле .h фреймворка iOS он создается с подчеркиванием «_» в конце:

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

Почему в конце имени свойства добавлен знак подчеркивания «_»?

1
Derek Lee 12 Фев 2021 в 10:55

1 ответ

Лучший ответ

Оказывается, в моем исходном коде в качестве источника данных использовался другой интерфейс, для которого было определено то же имя свойства:

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

Как только я изменил определение на другое имя, подчеркивание «_» больше не добавлялось в конец.

Исходя из этого, учитывая, что любой класс может реализовать любой интерфейс, я предполагаю, что это делается для того, чтобы отличить одно определение от другого, чтобы они не конфликтовали. Хороший звонок от команды Kotlin!

3
Derek Lee 12 Фев 2021 в 07:55