1,?:使用
liveData?.let {
LogUtil.i("liveData is not null")
} ?: run {
LogUtil.i("liveData is null")
}
这样的代码想要的结果:
- liveData ! = null 执行 LogUtil.i("liveData is not null")
- liveData = null 执行 LogUtil.i("liveData is null")
这里有个坑:当let{ ……}中返回null时,注意:let{ ……}会把lambada最后一行的返回值当做整个表达式的返回值
先执行LogUtil.i("liveData is not null")
再执行LogUtil.i("liveData is null")
代码示例:
var liveData: MutableLiveData<Int>? = MutableLiveData()
liveData?.let {
LogUtil.i("liveData is not null")
null//任何可能返回为null的表达式
} ?: run {
LogUtil.i("liveData is null")
}
原因分析:
expression1 ?:expression2表达式的含义是
expression1 ==null 时才执行expression2
expression1 !=null 时只执行expression1
上面的 expression1 = liveData?.let {
LogUtil.i("liveData is not null")
null //任何可能返回为null的表达式
}
liveData==null或者let{ ……}==null
expression1 为null,则expression2执行






网友评论