切换时如何在Kotlins中使用多行?

时间:2018-10-04 14:19:45

标签: android-studio kotlin switch-statement

科特林使用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 :(得分:1)

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

答案 1 :(得分:1)

您需要在一个代码块中包围多行代码,如下所示:

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文档中了解when expressions的更多信息。