Функция расширения 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

Однако имейте в виду, что свойства с побочными эффектами в методах получения обычно не рекомендуется (см. Также: Функции по сравнению со свойствами), и это поведение довольно запутанно для свойства.

Другие вопросы по тегам