让我说这个变量
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
}
那么如何解决呢?
答案 0 :(得分:0)
?.
表示仅当左侧不为null时才会执行。
?:
运算符仅在左侧不为空时执行右侧。
您可能会有类似的内容:
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 {...}
值,以避免执行`run {..}闭包。因此,代码如下:
number?.let { null } ?: run { 42 } === 42
(而不是null)