无法在kotlin` when`表达式中使用string.contains()

时间:2017-11-22 12:12:50

标签: android kotlin

我是var server = app.listen(80, function () { ... }的新手,我尝试了几种方法来使用以下代码

kotlin

在上面的代码 strAction.contains(“Grid”)中,这一行显示错误的不兼容类型

enter image description here

6 个答案:

答案 0 :(得分:15)

请尝试从when(strAction)

中删除 when 参数
val strAction = "Grid"    

when {
  strAction.contains("Grid") -> println("position is 1")
}

答案 1 :(得分:2)

您无需通过strAction

val strAction = "Grid"

 when {
   strAction.contains("Grid") -> println("position is 1")
 }
}

答案 2 :(得分:2)

如果when中只有一个案例,我建议您改用if。那已经是你想要做的了:

val strAction = "Grid"
if(strAction.contains("Grid")){
   println("position is 1")
}

更短,不是吗?

仅供记录:您启用Stringwhen}但Boolean个案例,这将无效。但是这会有什么作用:

val strAction = "Grid"
when(strAction.contains("Grid")){
   true->println("position is 1")
}

但是,请再次if

答案 3 :(得分:2)

您还可以结合使用whenwith以获得不错的语法:

with(strAction) {
  when {
    contains("Grid") -> println("position is 1")
    contains("bar") -> println("foo")
    startsWith("foo") -> println("bar")
    else -> println("foobar")
  }
}

您还可以将when的结果保存到属性中:

val result = with(strAction) {
  when {
    contains("bar") -> "foo"
    startsWith("foo") -> "bar"
    else -> "foobar"
  }
}

println(result)

答案 4 :(得分:0)

其他答案解释了如何解决问题但不解决实际问题。您的代码会计算strAction.contains("Grid")(这将是Boolean),然后strAction与此值进行比较。即它相当于

if (strAction == strAction.contains("Grid")) {
   println("position is 1")
}

它们不能相等,因为类型不兼容,所以永远不会采用这个分支,编译器会告诉你。

答案 5 :(得分:0)

您可以在

中使用Kotlin
if ("Grid" in strAction) { println("position is 1") }