2017-09-26 131 views
-1

我有以下語句:爲什麼三元運算符在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 

第一個是確定的,但對於第二個,我收到以下消息:類型不匹配。要求的Int。找到布爾值。

這是什麼原因?

回答

6

答案很簡單:有沒有三元運算符在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

是的,我錯過了第一次了。但是'if/else' thingy實際上比在三元運算符中使用單個字符作爲':'和'?'更具可讀性。偉大的事情是:'如果'和'when'是表達式:) – s1m0nw1

2

正如@s1m0nw1提到的,不是三元操作員。我發現擴展功能和Boolean一個偉大的方式是這樣的:

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

您可以使用下面這個擴展功能:

setBackgroundColor(isHighPriority() then RED ?: WHITE)