带有let的功能类型-未解决的参考:调用

时间:2018-11-16 08:25:43

标签: kotlin

我将onClick功能类型声明为类字段val onClick: (() -> Unit)? = null

并想像这样使用它:

if (onClick != null) {
    item.setOnClickListener { onClick.invoke() }
}

此代码有效,但是当我用let函数替换它时,它显示错误unresolved reference: invoke

onClick?.let {
    item.setOnClickListener { it.invoke() }
}

为什么会这样?

1 个答案:

答案 0 :(得分:2)

这里的it是第二个lambda(被传递到setOnClickListener中)的接收者,而不是第一个lambda(let)的接收者。通过显式为其指定名称来将参数声明为第一个lambda,然后使用该名称,例如

onClick?.let { handler ->
    item.setOnClickListener { handler.invoke() }
}