2016-04-07 19 views
3

我写了一个条件如下Kotlin:必需:kotlin.Boolean。找到:kotlin.Boolean?

if (subsriber?.isUnsubscribed && isDataEmpty()) { 
     loadData() 
    } 

正如我的用户可以为空。显示上述标题错误。所以我投下如下

if (subsriber?.isUnsubscribed as Boolean && isDataEmpty()) { 
     loadData() 
    } 

它看起来不怎么样。有没有更好的方法来做到这一点?

回答

11

我通常解决这种情况与?:操作:

if (subsriber?.isUnsubscribed ?: false && isDataEmpty()) { 
    loadData() 
} 

这样,如果subscribernullsubsriber?.isUnsubscribednullsubsriber?.isUnsubscribed ?: false评估为false,这是希望预期的结果,否则切换到?: true

如果遇到null,那么使用as Boolean还可以抛出一个空值类型为unsafe,并且会抛出异常。

+0

我喜欢这个Elvis操作符。这是我正在寻找的。大!谢谢! – Elye

+7

您也可以编写'subscriber?.isUnsubscribed == true',我发现它更清晰。 –

2

另外,你只是必需:kotlin.Boolean。找到:kotlin.Boolean?你可以这样做:

when(something?.isEmpty()) { 
    true -> { } 
    false -> { } 
    null -> { } 
} 

我知道这是回答的问题,但对于未来的观众可以帮助

相关问题