当值为android视图时,具有多个值的Kotlin不起作用
我实现了一个用于anko的递归应用的函数:当值为android视图时,具有多个值的Kotlin不起作用,android,kotlin,Android,Kotlin,我实现了一个用于anko的递归应用的函数: fun applyTemplateViewStyles(view: View) { when(view) { is EditText, TextView -> { .... } } } 我收到一个错误,说“函数调用'TextView(…)'应为” 既然我可以用is 0,1这样的子句编写when,为什么我不能用Android视图编写when呢 您可以这样做,只是语法不正确。当
fun applyTemplateViewStyles(view: View) {
when(view) {
is EditText, TextView -> {
....
}
}
}
我收到一个错误,说“函数调用'TextView(…)'应为”
既然我可以用is 0,1这样的子句编写when,为什么我不能用Android视图编写when呢 您可以这样做,只是语法不正确。当时,以下操作可用于在一个分支下处理多个类型:
when(view) {
is EditText, is TextView -> {
....
}
}
您缺少另一个
是:
fun applyTemplateViewStyles(view: View) {
when(view) {
is EditText, is TextView -> {
println("view is either EditText or TextView")
}
else -> {
println("view is something else")
}
}
}
在处理多个文本选项的情况下
你可以用逗号
when(option) { //option is string
"type A","type B" -> {
....
}
}
哇,这很直观。我喜欢科特利尼,我觉得这很不直观。直觉应该是是A,B->…
当匹配一个密封的类时,我遇到了一个问题。比如说,密封类Bla是这样使用的:Yes(val-index:Int):Bla()
和No(val-index:Int):Bla()
。匹配时:When(blaValue){is Yes,is No->println(“无法访问数据类值”)}
起作用,但没有自动强制转换,尽管这两种情况下的类型相同。在Swift中,同样的事情也起作用:开关blaValue{case.yes(let index),.no(let index):打印(“值可访问”)}
在Kotlin 1.3.50中,到2020年1月,不再需要了。但不幸的是,在这种情况下自动转换不起作用:-(@Angelina,这是预期的,因为有两种类型的值进入。