我是 Kotlin 菜鸟(第三天),正在尝试向我的班级添加一个侦听器。
我目前正在使用 lambda,如下例所示,它们工作得很好。
// Declare callback
class Controller {
var onAction = { -> }
}
// Use callback
myController.onAction = {
...
}
不过,我真的很喜欢 Android 的方式Button::setOnClickListener
在 Kotlin 代码中使用如下(无需使用=
):
myButton.setOnClickListener {
awesomeObject.doSomething()
}
这让我想知道:
我如何声明我的侦听器以便可以使用它Button::setOnClickListener
way?
最“Kotlinic”(*) 的方式是什么?矿井或Button::setOnClickListener
way?
(*) 就像 Pythonic 一样:)
您可以使用下一个语法来添加自定义侦听器:
class Controller {
var onAction1: () -> Unit = {} // listener with default implementation without params and returns Unit
var onAction2: (() -> Unit)? = null // nullable listener without params and returns Unit
var onAction3: ((Int) -> String)? = null // listener with param of type Int and returns String object
}
初始化监听器:
val controller = Controller()
controller.onAction1 = {
// your action
}
controller.onAction2 = {
// your action
}
controller.onAction3 = { intParam ->
// your action
"result" // return some String result
}
调用听众:
val controller = Controller()
controller.onAction1()
controller.onAction2?.invoke()
val result: String? = controller.onAction3?.invoke(20)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)