科特林使用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
分开,则代码行工作正常。我在做什么错了?
答案 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的更多信息。