无法在kotlin`whenexpression式中使用string.contains()

我是新的kotlin,我已经尝试了几种使用下面的代码的方法

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

在上面的代码strAction.contains(“Grid”)这行显示了一个不兼容types的错误

在这里输入图像说明

试试这个从when删除when(strAction)参数

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

如果你的when只有一个案例,我建议使用if而不是。 这已经是你在那里做的事了:

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

更短,不是吗?

只是为了记录:你打开一个String (在when ),但有Boolean情况下,这将无法正常工作。 但是,诀窍是什么呢?

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

但是, if

你不需要通过strAction

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

其他答案解释了如何解决这个问题,但不是问题实际上是什么。 你的代码计算strAction.contains("Grid") (这将是一个Boolean ),然后比较strAction和这个值 。 即它相当于

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

因为types不兼容,所以它们不能相同,所以这个分支永远不会被采用,编译器会告诉你这一点。