Kotlin当多个值不工作时值是一个android视图

jon*_*nrz 20 android kotlin

我实现了一个递归使用anko的apply函数:

fun applyTemplateViewStyles(view: View) {
    when(view) {
        is EditText, TextView -> {
            ....
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,说"函数调用'TextView(...)'期望"

既然我可以写一个像0,1这样的子句,为什么我不能用Android视图做同样的事情?

Dan*_*orm 38

你错过了另一个is:

fun applyTemplateViewStyles(view: View) {
    when(view) {
        is EditText, is TextView -> {
            println("view is either EditText or TextView")
        }
        else -> {
            println("view is something else")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为这非常不直观。直觉上应该是“是 A,B -> ...” (4认同)
  • 哇,这很直观.我喜欢Kotlin (2认同)
  • 截至 2020 年 1 月,Kotlin 1.3.50 不再需要“is”。 (2认同)

小智 11

如果处理多个文本选项,您可以使用逗号

when(option) { //option is string
    "type A","type B" -> {
        ....
    }
}
Run Code Online (Sandbox Code Playgroud)


zsm*_*b13 7

你可以这样做,你只是没有正确的语法.以下工作用于处理以下一个分支下的多个类型when:

when(view) {
    is EditText, is TextView -> {
        ....
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 但不幸的是,在这种情况下自动转换不起作用:-( (3认同)
  • @Angelina 这是预期的,因为有两种类型的值进来。 (3认同)