【问题标题】:Unable to use string.contains() in kotlin `when` expression无法在 kotlin `when` 表达式中使用 string.contains()
【发布时间】:2017-11-22 12:12:49
【问题描述】:

我是kotlin的新手,我尝试了几种使用以下代码的方法

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

在上面的代码中 strAction.contains("Grid") 这行向我显示了不兼容类型的错误

【问题讨论】:

  • 我不明白为什么会有downvote

标签: android kotlin


【解决方案1】:

您还可以将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)

【讨论】:

  • 谢谢这是最好的回复 imo,有一种方法可以“分解”“包含”,所以如果我只想要包含指令,我不需要在每一行都输入它?
【解决方案2】:

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

val strAction = "Grid"    

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

【讨论】:

  • 感谢您的帮助,但它对我仍然面临同样的问题没有用
  • @YoLo 从when 中删除 strAction 不需要传递那个
【解决方案3】:

如果您的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

【讨论】:

    【解决方案4】:

    你不需要传递strAction

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

    【讨论】:

      【解决方案5】:

      其他答案解释了如何解决问题,但没有说明问题到底是什么。您的代码计算strAction.contains("Grid")(将是Boolean),然后strAction 与此值进行比较。 IE。相当于

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

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

      【讨论】:

        【解决方案6】:

        您可以在中使用 Kotlin

        if ("Grid" in strAction) { println("position is 1") }
        

        【讨论】:

          猜你喜欢
          • 2021-04-07
          • 2023-03-26
          • 1970-01-01
          • 2013-02-14
          • 1970-01-01
          • 2019-01-08
          • 1970-01-01
          • 1970-01-01
          • 2018-04-04
          相关资源
          最近更新 更多