Перечислите внутренние значения перечисления в котлине - PullRequest
0 голосов
/ 20 сентября 2019

Я знаю, что был похожий вопрос .Для меня перечисление выглядит следующим образом:

enum class Gender (val s:String) {
    Female("female"),
    Male("male")
}

Как я могу повторить перечисление Gender и получить «женский» или «мужской»?

Ответы [ 3 ]

3 голосов
/ 20 сентября 2019

Вот простой пример.Существует несколько способов итерации значений, но они аналогичны итерации любого массива.

fun main() {
    for (gender in Gender.values()) {
        println(gender.s)
    }
}

enum class Gender(val s: String) {
    Female("female"),
    Male("male")
}

Для острого взгляда переменная 's', созданная в объявлении класса Gender, также станет переменной длядоступ при итерации значений Gender.Смущает немного то, что вы думаете о «женском» как о ключе, а «о женском» как о значении этого ключа.Однако перечисления перечисляют каждый тип внутри себя как значения.

0 голосов
/ 20 сентября 2019

для Android, поскольку оно упоминается в ваших тегах: Proguard не может оптимизировать этот случай (или, по крайней мере, не может в 2018 ), поэтому может быть лучше сделать:

enum class Gender {
    Female,
    Male
}

val Gender.s get() = when(this) {
    Female -> "female"
    Male -> "male"
}

Тогда используйте комментарий @ Slaw или ответ @ Asgeir, они будут работать как с вашим исходным кодом.

0 голосов
/ 20 сентября 2019

Используйте последнюю версию enum

@StringDef(Female, Male)
@Retention(AnnotationRetention.SOURCE)
annotation class Gender {
    companion object {
        const val Female = "female"
        const val Male = "male"
    }
}

Подробнее информация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...