语法
lambda被大括号包含
{T,T->Boolean},代表的含义是两个T类型参数,返回值为Boolean
练习一:遍历数组并打印
fun main() { //定义一个String类型的数组array val array: Array= arrayOf("a", "", "c") println("==========lambda终极遍历方式==========") array.forEach(::println) println("==========普通遍历方式==========") for (a in array) { testPrint(a) } println("==========完整版的lambda写法==========") array.forEach({ element -> testPrint(element) }) println("==========如果一个函数的最后一个参数是lambda表达式,则可以将该表达式写在括号后面==========") array.forEach() { element -> testPrint(element) } println("==========如果一个函数只有一个参数,且参数是lambda表达式,则小括号都可以省略==========") array.forEach { element -> testPrint(element) } println("==========如果lambda表达式参数只有一个,则参数名默认用it==========") array.forEach { testPrint(it) } println("==========如果函数与lambda表达式的`参数、返回值一致,则可以用双冒号写法()==========") array.forEach(::testPrint)}/** * 自定义的打印方法 */fun testPrint(str: String) { println(str)}复制代码
练习二:仿照view点击事件回调
1.声明一个View类
class View { //定义一个lambda表达式变量 //第一种方式:使用lambda表达式作为成员变量 var mOnClickListener = { view: View -> Unit } //第二种方式:使用函数作为成员变量 /* var mOnClickListener = fun(view: View) { } */ //为lambda赋值 fun setOnClickListener(onClick: (View) -> Unit) { this.mOnClickListener = onClick } //在点击事件中触发回调 fun click() { mOnClickListener(this) }}复制代码
2.在activity中设置view的监听事件,并点击view触发监听
fun main() { val view = View() //最完整的lambda写法 view.setOnClickListener({ view: View -> println("被点击了,view:$view") }) //去掉了小括号和View类型 view.setOnClickListener { view -> println("被点击了,view:$view") } //当参数只有一个view时,用it代替view view.setOnClickListener { println("被点击了,view:$it") } //点击view,触发监听 view.click()}复制代码