Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当值为android视图时,具有多个值的Kotlin不起作用_Android_Kotlin - Fatal编程技术网

当值为android视图时,具有多个值的Kotlin不起作用

当值为android视图时,具有多个值的Kotlin不起作用,android,kotlin,Android,Kotlin,我实现了一个用于anko的递归应用的函数: fun applyTemplateViewStyles(view: View) { when(view) { is EditText, TextView -> { .... } } } 我收到一个错误,说“函数调用'TextView(…)'应为” 既然我可以用is 0,1这样的子句编写when,为什么我不能用Android视图编写when呢 您可以这样做,只是语法不正确。当

我实现了一个用于anko的递归应用的函数:

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,这是预期的,因为有两种类型的值进入。