高阶函数

2021-03-23  本文已影响0人  吃饱了就送

lambda表达式:只有一个参数可以省略不写,kotlin默认的参数名it

class AdvanceOperate{
    //定义高阶函数
    fun multipleOperate(num1:Int,num2:Int,operate:(num1:Int,num2:Int)->String):String{//第三个参数为普通函数
        println("$num1 and $num2 for different operate")
        return operate(num1,num2)
    }
}

fun a(funParam: (Int) -> String): String {
        return funParam(1)
    }

    fun numberAdd(num: Int): (Int) -> Unit {
        return { print(it) }
    }

用高阶函数代替回调

常规写法:

private var mListener: OnClickItemListener? = null
fun setListener(listener: OnClickItemListener) {
        mListener = listener
    }

    interface OnClickItemListener {
        fun onClickCall(list: MutableList<KOLInfoVm>)
    }

在相应位置调用mListener.onClickCall方法,回调界面调用setListener

高阶函数写法:
在构造函数中增加方法参数addPeople

class SelectKOLPopup(context: Context, var mList: MutableList<KOLInfoVm>,var addPeople:(list: MutableList<KOLInfoVm>) -> Unit) : BottomPopupView(context) {

在相应位置调用addPeople方法,回调界面lamda表达式

SelectKOLPopup(this, mSelectList) { completedSelect() }

直接声明方法 lateinit var addPeople: (list: MutableList<KOLInfoVm>) -> Unit
fun setAddPeople(addPeople: (list: MutableList<KOLInfoVm>) -> Unit) {
this.addPeople = addPeople
}

上一篇 下一篇

猜你喜欢

热点阅读