Как использовать несколько строк в Kotlins при переключении? - PullRequest
0 голосов
/ 04 октября 2018

Котлин использует when вместо switch и выглядит примерно так:

when(version) {
    "v1" ->
        Log.d("TAG", "WOW")
    "v2" ->
        Log.d("TAG", WOAAH")
    else ->
        "Log.d("TAG", "ELSE")

Пока все хорошо.Но что, если я хочу добавить несколько строк кода после каждого условия?Это мой код, и я попытался использовать and в конце каждой новой строки:

when(version) {
    "anhorig" -> 
        Log.d("TAG", "Anhorig") and
        subHeader.text = getString(R.string.sv_anhorig_ch1)

    "personal" ->
        Log.d("TAG", "Personal")
    else ->
        Log.d("TAG", "Else")
}

В строке появляется ошибка

subHeader.text = getString(R.string.sv_anhorig_ch1)

, говорящая Type mismatch. Expected Int, found string and Unit

Строка кода работает нормально, если она отделена от кода when.Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Вам необходимо заключить несколько строк кода в блок, например, так:

when(version) {
    "anhorig" -> {
        Log.d("TAG", "Anhorig")
        subHeader.text = getString(R.string.sv_anhorig_ch1)
    }
    "personal" ->
        Log.d("TAG", "Personal")
    else ->
        Log.d("TAG", "Else")
}

Что касается несоответствия типов, значение выражения when равно последнему вычисленному выражению в блоке,Кажется, что ожидаемое значение этого выражения - Int, но ваш последний оператор - subHeader.text = getString(R.string.sv_anhorig_ch1), который является строкой.

Вы можете прочитать больше в документации Kotlin для , когда выражения .

0 голосов
/ 04 октября 2018

Если регистр оператора when занимает более одной строки, вы должны использовать блок кода в фигурных скобках {}.Вот так:

when(version) {
    "anhorig" -> {
        Log.d("TAG", "Anhorig")
        subHeader.text = getString(R.string.sv_anhorig_ch1)
    }
    "personal" ->
        Log.d("TAG", "Personal")
    else ->
        Log.d("TAG", "Else")
}

И, конечно, вы должны удалить and

...