Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin “一行”;如果;活动_Kotlin - Fatal编程技术网

Kotlin “一行”;如果;活动

Kotlin “一行”;如果;活动,kotlin,Kotlin,我有以下代码: private fun setCashPaymentContainer(isSelected: Boolean) { if (isSelected) { dataBinding.cashPaymentCheckImageViewContainer.visibility = View.VISIBLE } else { dataBinding.cashPaymentCheckImageVie

我有以下代码:

 private fun setCashPaymentContainer(isSelected: Boolean) {      
        if (isSelected) {
            dataBinding.cashPaymentCheckImageViewContainer.visibility = View.VISIBLE
        } else {
            dataBinding.cashPaymentCheckImageViewContainer.visibility = View.GONE
        }
    }

它工作得很好,但我想改进它,并将其编写为简化易读的if-else块。如果我能用一行if-else语句,那就太好了。请建议。

您可以使用if表达式:

dataBinding.cashPaymentCheckImageViewContainer.visibility = if(isSelected) View.VISIBLE else View.GONE
…但是在这种情况下,更好(信用:):


注意:还有和。

事实上,Kotlin允许这样做

private fun setCashPaymentContainer(isSelected: Boolean) {      
    dataBinding.cashPaymentCheckImageViewContainer.visibility = when {
        isSelected -> View.VISIBLE
        else -> View.GONE
    }
}
实际上,你可以把它做得更好(依我看):

现在你可以做了

private fun setCashPaymentContainer(isSelected: Boolean) {      
    dataBinding.cashPaymentCheckImageViewContainer.showIf { isSelected }
}

是的,为什么不可能?这能回答你的问题吗?从上下文来看,我假设这是Android。如果您在项目中包括
Android KTX
,那么您可以使用扩展属性:因此您只需执行
view.isVisible=isSelected
inline fun View.showIf(condition: (View) -> Boolean) {
    val shouldShow = condition(this) 

    this.visibility = when {
        shouldShow -> View.VISIBLE
        else -> View.GONE
    }
}
private fun setCashPaymentContainer(isSelected: Boolean) {      
    dataBinding.cashPaymentCheckImageViewContainer.showIf { isSelected }
}