【问题标题】:how to make control flow based on nullable variable in Kotlin? [duplicate]如何在 Kotlin 中基于可空变量进行控制流? [复制]
【发布时间】:2019-01-24 11:22:25
【问题描述】:

假设我有这个变量

   val number : Int? = 12

我想根据变量做控制流,如果变量为null则做某事,否则做其他事

在 Swift 中我可以做这样的事情:

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
}

那么如何解决呢?

【问题讨论】:

    标签: kotlin nullable


    【解决方案1】:

    ?. 表示仅当左侧不为空时才会执行。 ?: 运算符仅在左侧不为空时才执行右侧。 你可能有类似的东西:

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

    这里我们为then 子句使用T.let 扩展函数,为else 子句使用run{ }(扩展)函数。

    警告: 语义是您希望从 let {...} 闭包返回 non-null 值,以避免执行 `run {..} 闭包。因此代码如下: number?.let { null } ?: run { 42 } === 42(不为空)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      • 2015-03-03
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多