为什么三元运算符不是"工作"在科特林?

时间:2017-09-26 21:16:16

标签: kotlin

我有以下声明:

val visibility = if (itemView.img_playstore.visibility == View.VISIBLE)  View.GONE else View.VISIBLE

另一个:

val visibility : Int = itemView.img_playstore.visibility == View.VISIBLE ?  View.GONE : View.VISIBLE

第一个是好的,但对于第二个,我收到以下消息:类型不匹配。必需的国际找到布尔。

这是什么原因?

2 个答案:

答案 0 :(得分:9)

答案很简单:Kotlin中没有没有三元运算符。第一个代码段中的if/else可能是最好的选择,因为它是Kotlin中的表达式(除了Java之外)。

val cond: Boolean = true
val visibility: Int = if (cond) 2 else 3

也可以使用when

val cond: Boolean = ...
val visibility: Int = when {
    cond -> 2
    else -> 3
}

或者像这样:

val visibility: Int = when (cond) {
    true -> 2
    false -> 3
}

很多方面,但没有三元运营商...

答案 1 :(得分:3)

@s1m0nw1所述,没有三元运算符。我用扩展函数和Boolean找到的一个好方法是:

infix fun <T> Boolean.then(param: T): T? = if (this) param else null

您可以使用此扩展功能,如下所示:

setBackgroundColor(isHighPriority() then RED ?: WHITE)