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
}
网友评论