Функция расширения Kotlin
Учитывая это:
MyView.setVisibility(View.VISIBLE)
можно упростить до этого:
inline fun View.setVisible() = apply { visibility = View.VISIBLE }
MyView.setVisible()
Или это, если вы предпочитаете:
inline infix fun View.vis(vis: Int) = apply { visibility = vis }
MyView vis View.VISIBLE
Есть ли способ сделать то же самое, выполнив это:
MyView.VISIBLE
2 ответа
Решение
Кажется немного странным, что "получатель" изменяет состояние, но вы можете использовать свойство extension:
val View.VISIBLE: Unit
get() {
visibility = View.VISIBLE
}
И вы также можете сделать так, чтобы он возвращал новое значение видимости или возвращал сам себя, чтобы вы могли потенциально связывать вызовы.
val View.VISIBLE: Int
get() {
visibility = View.VISIBLE
return visibility
}
или же
val View.VISIBLE: View
get() = apply { visibility = View.VISIBLE }
Да, вы можете написать свойство свойства extension с помощью метода get:
val View.visible: View
get() = apply { visibility = View.VISIBLE }
С использованием:
myView.visible
Однако имейте в виду, что свойства с побочными эффектами в методах получения обычно не рекомендуется (см. Также: Функции по сравнению со свойствами), и это поведение довольно запутанно для свойства.