kotlin学习笔记——lambda表达式

2019-05-19  本文已影响0人  崔兴旺

语法

lambda被大括号包含
{T,T->Boolean},代表的含义是两个T类型参数,返回值为Boolean

练习一:遍历数组并打印

fun main() {
    //定义一个String类型的数组array
    val array: Array<String> = 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()
}
上一篇下一篇

猜你喜欢

热点阅读