一行“if”操作

Posted

技术标签:

【中文标题】一行“if”操作【英文标题】:One line "if" operation 【发布时间】:2020-02-26 23:37:53 【问题描述】:

我有以下代码:

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

它工作正常,但我想改进它并将它写成简化和可读 if else 块。如果我能写一个 if else 语句会很好请建议。

【问题讨论】:

是的,为什么这不可能? 这能回答你的问题吗? Kotlin Ternary Conditional Operator 从上下文我认为这是android。如果您在项目中包含Android KTX,则可以使用扩展属性:View.isVisible,因此您只需执行view.isVisible = isSelected 【参考方案1】:

您可以使用 if 表达式:

dataBinding.cashPaymentCheckImageViewContainer.visibility = if(isSelected) View.VISIBLE else View.GONE

...但是在这种情况下,isVisible 更好(信用:Pawel):

dataBinding.cashPaymentCheckImageViewContainer.isVisible = isSelected

注意:还有isInvisibleisGone

【讨论】:

【参考方案2】:

确实,Kotlin 允许这样做。

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

你实际上可以让它变得更好(imo):

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 

【讨论】:

以上是关于一行“if”操作的主要内容,如果未能解决你的问题,请参考以下文章

PHP操作MySQL,删除一行数据库,怎么写?

分支结构

java 操作Excel,循环每一行的列,为啥列数不相同呢。

winform中datagridview 选中行操作的问题

华为编程规范

linux 文件IO操作中,用read函数读取文件,有没有办法每次只读取一行,而不是读取指定的字节数?