在kotlin中作为参数使用默认参数

时间:2019-08-22 11:01:35

标签: android kotlin

我有一个函数,该函数具有另一个函数作为参数,我想将默认函数设置为我的函数参数。

这里我有这样的功能

public fun showDialog(context: Context, title: String = "-", mode: String = "info", type: String = "info", onOk : (dialog: Dialog) -> Unit = { onClickOk(dialog)) }) {

val dialog = Dialog(context)
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
dialog.setCancelable(false)
dialog.setContentView(R.layout.modal_dialog)
dialog.window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))

dialog.dialogText.text = title

if (mode.equals("dialog")) {
    dialog.dialogYesNo.visibility = View.VISIBLE
    dialog.optionOk.visibility = View.GONE
} else {
    dialog.dialogYesNo.visibility = View.GONE
    dialog.optionOk.visibility = View.VISIBLE
}

if (type.equals("success")) {
    dialog.optionOk.background = context.getDrawable(R.drawable.btn_rounded_success)
    dialog.dialogAlert.background = context.getDrawable(R.drawable.dialog_alert_success)
} else if (type.equals("fail")) {
    dialog.optionOk.background = context.getDrawable(R.drawable.btn_rounded_fail)
    dialog.dialogAlert.background = context.getDrawable(R.drawable.dialog_alert_fail)
} else {
    dialog.optionOk.background = context.getDrawable(R.drawable.btn_rounded_primary)
    dialog.dialogAlert.background = context.getDrawable(R.drawable.dialog_alert_info)
}

dialog.optionOk.setOnClickListener{
    onOk(dialog)
}

dialog.show()
}

这里是我的onClickOk函数

public fun onClickOk (dialog: Dialog){
    dialog.hide()
}

我作为参数的功能在以下代码中:

onOk : (dialog: Dialog) -> Unit

在这段代码中,我给函数参数提供了默认参数

onOk : (dialog: Dialog) -> Unit = { onClickOk(dialog)) }

但是我无法将onOk函数上的“ dialog”参数传递给onClickOk函数

这是我的错误代码屏幕截图

enter image description here

有人可以帮我吗?谢谢

2 个答案:

答案 0 :(得分:0)

您可以传递方法参考:

onOk : (dialog: Dialog) -> Unit = this::onClickOk

答案 1 :(得分:0)

函数类型表示法中的名称仅出于文档目的,您将无法在lambda的正文中使用它们:

  

函数类型表示法可以选择包含函数参数的名称:(x:Int,y:Int)->点。这些名称可用于记录参数的含义

如果lambda仅具有一个参数,则可以使用隐式it参数来引用该参数:

onOk: (dialog: Dialog) -> Unit = { onClickOk(it) }

如果有两个或多个参数,则必须在lambda的主体内声明它们:

onOk: (Dialog, String) -> Unit = { dialog, title -> onClickOk(dialog, title) }