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

tor*_*ore 4 switch-statement kotlin android-studio

Kotlin 使用了when而不是,switch它看起来像这样:

when(version) {
    "v1" ->
        Log.d("TAG", "WOW")
    "v2" ->
        Log.d("TAG", WOAAH")
    else ->
        "Log.d("TAG", "ELSE")
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好。但是如果我想在每个条件后添加几行代码怎么办?这是我的代码,我尝试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")
}
Run Code Online (Sandbox Code Playgroud)

我在线时出错

subHeader.text = getString(R.string.sv_anhorig_ch1)
Run Code Online (Sandbox Code Playgroud)

Type mismatch. Expected Int, found string and Unit

如果与when代码分开,代码行可以正常工作。我究竟做错了什么?

Deh*_*son 8

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

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")
}
Run Code Online (Sandbox Code Playgroud)

至于类型不匹配,when 表达式的值等于块中最后一个评估的语句。这个表达式的预期值似乎是 Int,但你的最后一条语句是subHeader.text = getString(R.string.sv_anhorig_ch1)哪个字符串。

您可以在 Kotlin 文档中阅读有关when 表达式的更多信息