kotlin学习之自定义lambda表达式----简单易懂教你写一个可以接受lambda表达式的函数

更新一下,发现一种更简单的方式,如下,后面的内容就不用看了

fun setOnClickListener(lis: (view: View) -> Unit) {
    val view = View(context)
    view.setOnClickListener(lis)
}

--------

用kotlin有一段时间了,发现每次调用系统函数大部分都可以直接传递一个lambda表达式过去,而自己的函数却只能传一个引用过去,表示很无奈

然后就研究了下怎么自定义个一个可以接受lambda表达式的函数

网上搜了几篇文章感觉都比较绕,也可能是我比较笨,嗯,好了,长话短说

首先

假设我们需要在用户点击某个view的时候,可以拿到这个view的index

正常情况下,我们都是如下写法

class Container {
    private var listener : ItemClickListener? = null
    fun setOnItemClickListener(listener : ItemClickListener) {
        this.listener = listener
    }
}

fun test() {
    val contaienr = Container()
    contaienr.setOnItemClickListener(object : ItemClickListener {
        override fun onItemClick(index : Int) {
            Log.e(TAG , "$index")
        }
    })
}

interface ItemClickListener {
    fun onItemClick(index : Int)
}


那么接下来就以一个简单易懂的例子教你写一个可以接受labmda表达式的函数

其他代码都没有变化,所以只展示有变化的部分

如下:

class Container {
    private var listener : ItemClickListener? = null

    fun setOnItemClickListener(action : (Int) -> Unit) {
        listener = object : ItemClickListener {
            override fun onItemClick(index : Int) {
                action(index)
            }
        }
    }
}

fun test() {
    val contaienr = Container()
    contaienr.setOnItemClickListener { Log.e(TAG , "$it") }
}

上面的action就是你传进来的lambda表达式,他表示接收一个Int类型的参数,没有返回值


这样是不是写个又返回值的或者多个参数的都手到擒来,怎么样,学会了吗,是不是简单易懂

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值