kotlin作为参数传递函数的类型不匹配,必需:()-> Unit,找到:Unit

时间:2018-10-05 13:12:45

标签: kotlin kotlin-function-type

具有用于回调的函数类型的函数

fun dataBtnClickHandler(callbackFunc: () -> Unit){

    // do something
    ......

    // call the callback function
    callbackFunc     
}

有一个定义为

的函数
private fun lunchStartActivity() {
    val intent = Intent(this, StartActivity::class.java)
    val bundle = Bundle()
    bundle.putInt(FRAGMENT_PREFERENCE, fragmentPreference)
    intent.putExtras(bundle)
    startActivity(intent)
}

在点击开关中,它调用dataBtnClickHandler并传递lunchStartActivity()进行回调。

但是出现错误:Type mismatch, Required: ()->Unit, Found: Unit,错误是什么意思?

when (clickedId) {
   R.id.data_btn -> dataBtnClickHandler(lunchStartActivity())  //<=== Error:  Type mismatch, Required: ()->Unit, Found: Unit

1 个答案:

答案 0 :(得分:4)

您的方法需要一个返回unit的函数参数。

Ext.getCmp('textboxID').focus();

如果直接传递方法调用,则为该方法提供一个包含返回类型的参数。您最初的方法是将Unit传递给方法。

要传递实际方法,而不仅仅是传递调用的返回类型,请使用callbackFunc: // Name with a type that is () // a 0 arg function -> Unit // that returns Unit (AKA void, or nothing)

::

或者dataBtnClickHandler(::launchStartActivity) (如果它在当前的对象/类中),或者将this::launchStartActivity替换为类名(如果是顶级函数,则替换为文件名)。尽管::在大多数情况下有效。

记住;您在此处传递的是方法引用,而不是方法调用或变量的结果。