我写了一个条件如下
if (subsriber?.isUnsubscribed && isDataEmpty()) {
loadData()
}
由于我的订阅者可能为null。显示上述标题错误。所以我把它转换成如下
if (subsriber?.isUnsubscribed as Boolean && isDataEmpty()) {
loadData()
}
看起来不太好看。有没有更好的方法呢?
答案 0 :(得分:26)
我通常使用?:
运算符来解决这种情况:
if (subsriber?.isUnsubscribed ?: false && isDataEmpty()) {
loadData()
}
这样,如果subscriber
为null
,则subsriber?.isUnsubscribed
也是null
,而subsriber?.isUnsubscribed ?: false
的评估结果为false
,这可能是预期的结果,否则切换到?: true
。
同时使用as Boolean
投射可空类型为unsafe,如果遇到null
则会抛出异常。
答案 1 :(得分:5)
你还有必需:kotlin.Boolean。发现:kotlin.Boolean ?你可以这样做:
when(something?.isEmpty()) {
true -> { }
false -> { }
null -> { }
}
此外,如果您只对一个简单的条件声明
感兴趣if(something?.isEmpty() == true){
this will only worked if not null && empty
}
我知道这是一个已回答的问题,但未来的观众可以提供帮助
答案 2 :(得分:5)
解决此问题的另一种方法是显式检查表达式是否为<TextBlock
x:Name="Title"
FontSize="{myUserControl.FontSize * 1.07}">
Hello Custom User Control!
</TextBlock>
:
true
答案 3 :(得分:0)
如果 subscriber
是val
,则
subscriber != null && subscriber.isUnsubscribed && isDataEmpty()
将起作用。另外,subscriber != null
在if
块内是众所周知的,您可以在subscriber
上调用方法而无需使用?.
或!!.
。