Разница между вызываемым методом и ссылкой внутри? .Let body - PullRequest
0 голосов
/ 04 июля 2019

Есть ли какая-либо разница между вызовами методов и ссылочным значением внутри? .Let body?

fun setDrawableTintColor(drawable: Drawable?, @ColorInt tintColor: Int) {
    drawable?.let {
        drawable.mutate()
        if (tintColor != COLOR_NO_TINT) {
            drawable.setColorFilter(tintColor, PorterDuff.Mode.SRC_IN)
        } else {
            drawable.clearColorFilter()
        }
    }
}

А этот:

fun setDrawableTintColor(drawable: Drawable?, @ColorInt tintColor: Int) {
    drawable?.let {
        it.mutate()
        if (tintColor != COLOR_NO_TINT) {
            it.setColorFilter(tintColor, PorterDuff.Mode.SRC_IN)
        } else {
            it.clearColorFilter()
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Эта особенность Kotlin, во-первых, это непосредственное изменение объекта, во-вторых, изменение переданного аргумента scope-functions .

при использовании функции let, как правило, лучше, чем использование объекта self (meanЭто).Компилятор при компиляции кода понимает, что это ссылка на этот объект.int другим способом, при компиляции кода компилятором сначала запускается значение.

0 голосов
/ 04 июля 2019

Оба одинаковы. Любое из нижеприведенного вы можете использовать

(1)

fun setDrawableTintColor(drawable: Drawable?, @ColorInt tintColor: Int) {
    drawable?.let {
        drawable.mutate()
        if (tintColor != COLOR_NO_TINT) {
            drawable.setColorFilter(tintColor, PorterDuff.Mode.SRC_IN)
        } else {
            drawable.clearColorFilter()
        }
    }
}

(2)

fun setDrawableTintColor(drawable: Drawable?, @ColorInt tintColor: Int) {
    drawable?.let {
        it.mutate()
        if (tintColor != COLOR_NO_TINT) {
            it.setColorFilter(tintColor, PorterDuff.Mode.SRC_IN)
        } else {
            it.clearColorFilter()
        }
    }
}

(3)

fun setDrawableTintColor(drawable: Drawable?, @ColorInt tintColor: Int) {
    drawable?.let { drawableRes ->
        drawableRes.mutate()
        if (tintColor != COLOR_NO_TINT) {
            drawableRes.setColorFilter(tintColor, PorterDuff.Mode.SRC_IN)
        } else {
            drawableRes.clearColorFilter()
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...