题记:
在kotlin中,调用函数时,如果参数为函数并且是最后一个参数,可以将参数移到括号外面。移动到括号外面之后如果括号内没有参数,括号可以省略不写。
View.OnClickListener的变身
Kotlin对Lambda的完美支持,让我们写单函数时有了极速的提升。
在Java中,对View添加一个点击事件时是这样写的:
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
v.setVisibility(View.VISIBLE);
...
}
});
而在Kotlin中我们使用它时,可以这样:
view.setOnClickListener(object :View.OnClickListener{
override fun onClick(v: View?) {
v.visibility = View.VISIBLE
...
}
})
等等,这代码量看起来好像跟Java也差不多吧,除了少了个;
别急,别急。这才是开始。根据lambda表达式规则:
Ø Lambda表达一般使用“{ }”包围。
Ø 它的参数(如果有的话)在“->”前定义,参数类型可能是省略的。
Ø 函数体跟在“->”后面。
我们可把上面的代码简化为:
view.setOnClickListener({ v ->
v.visibility = View.VISIBLE
...
})
根据如果参数为函数并且是最后一个参数,可以将参数移到括号外面。
view.setOnClickListener() { v ->
v.visibility = View.VISIBLE
...
}
根据移动到括号外面之后如果括号内没有参数,括号可以省略不写。你见到的是这个。
view.setOnClickListener { v ->
v.visibility = View.VISIBLE
...
}
根据若函数参数对应的函数只有一个参数,在使用时,可以省略参数定义,直接使用“it”代替参数,你最终看到的是这个。
view.setOnClickListener {
it.visibility = View.VISIBLE
}
简单吧。