具有用于回调的函数类型的函数
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
答案 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
替换为类名(如果是顶级函数,则替换为文件名)。尽管::在大多数情况下有效。
记住;您在此处传递的是方法引用,而不是方法调用或变量的结果。