代码之家  ›  专栏  ›  技术社区  ›  Alexa289

如何在Kotlin中基于可空变量进行控制流?[复制品]

  •  0
  • Alexa289  · 技术社区  · 7 年前

    这个问题已经有了答案:

    假设我有这个变量

       val number : Int? = 12
    

    我希望基于变量生成控制流,如果变量为空,则执行某些操作,否则执行其他操作。

    在斯威夫特,我可以做出这样的事情:

    if let number = number {
        print(number)
    } else {
        // do something else
    }
    

    我真的可以这样做

    if number != null {
       print(number!!) // I want to avoid exclamation mark like this
    } else {
       // do something else
    }
    

    但我想避免感叹号,比如 print(number!!)

    我以前以为我可以做这样的事

    number?.let {
    
    print(it)
    
    } else {
      // else block is not available in let in Kotlin
    }
    

    那么如何解决这个问题呢?

    1 回复  |  直到 7 年前
        1
  •  0
  •   s1m0nw1    7 年前

    这个 ?. 表示只有左侧不为空时才会执行。 这个 ?: 只有当左侧不为空时,运算符才执行右侧。 您可能有如下情况:

    theExpression().toCompute().theNumber?.let { number ->
      print("This is my number $number
    } ?: run {
      print("There is no number")
    }
    

    这里我们使用 T.let 的扩展函数 then 子句和 run{ } (扩展)函数 else 条款。

    警告: 语义是您期望返回的 non-null 价值从 let {...} 关闭以避免执行“运行”关闭。因此,代码如下: number?.let { null } ?: run { 42 } === 42 (而不是空)