它的调用方法与?.let正文中的引用之间的区别

时间:2019-07-04 12:17:35

标签: android kotlin

对它的方法调用与?.let主体中的参考值之间有什么区别?

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 :(得分:0)

两者相同,下面的任何一个都可以使用

(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()
        }
    }
}

答案 1 :(得分:0)

此Kotlin功能的第一种方法是直接更改对象,第二种方法是更改​​传递给scope-functions的参数。

使用let函数通常比使用self对象(表示平均值)更好。 编译器在编译代码时理解为该对象的参考。 用另一种方式,在编译代码编译器的第一个运行值时。